【问题标题】:Deleting a whole row with timer [closed]用计时器删除整行[关闭]
【发布时间】:2021-07-05 11:29:54
【问题描述】:

我正在 MySQL 中创建一个表 - 像这样的 phpmyadmin:

CREATE TABLE `table_test` (
 `ID` int(11) NOT NULL,
 `Description` varchar(255) NOT NULL,
 `CreationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP)

我还想在此表中添加DeleteTimer。假设创建了一个 ID,并且它的 Description 为空/空,所以我想为这个特定的 ID 添加 DeleteTimer = 7 天。 7 天后,它会检查此 ID 的 Description 是否仍然为空,然后自动删除该 ID 及其整行。

据我所知How to implement cron in code (php)? 是执行一个时间限制为 7 天的 cron 作业,以便自动删除该行。但是如何在 phpmyadmin 中实现呢?由于我托管自己的服务器,因此编写 php 代码对于这个 cron 工作会更好,还是在 phpmyadmin 中执行更好?

// remove old stale data
$sql = "DELETE FROM table_test
        WHERE CreationDate< DATE_ADD(NOW(),INTERVAL -2 HOUR)"; //To add 7 days here

if ( ! $mysqli->query($sql) ) {
    // log $mysqli->error somewhere
}

【问题讨论】:

  • 您不能在 phpmyadmin 中执行此操作。它仅用于管理您的数据库,您需要在.php 文件中编写所需的逻辑,并使用您想要的 cron 作业执行它。 Cron 作业是服务器。
  • @ikiK 你能用教程链接或如何做到这一点的例子来解释吗?
  • 你也可以在间隔模式下使用MySQL调度器mariadb.com/kb/en/event-scheduler
  • @ikiK 它只是在这里创建的托管服务器https://kas.all-inkl.com/
  • 你刚刚分享的内容对我来说真的没有任何意义,对不起。看看你有什么样的服务器,linux、windows 或其他的,并研究如何将 php 文件作为 cron 作业执行。然后看看你的主机提供了什么作为工具。例如,在 C-panel 上设置 cron 作业真的很容易……或者您可能需要通过 SSH 连接到您的服务器来设置它……您需要重新搜索,这里有很多未知数。 ..

标签: mysql sql


【解决方案1】:

我建议您只添加一个视图以查看未删除的记录:

create view v_table_test as
    select t.*
    from table_test t
    where CreationDate >= now() - interval 7 day;

您可以访问此视图并查看未删除的记录。这比实际删除记录有一个优势,因为它是最新的——您不必担心作业或服务器负载的延迟。

然后,定期(比如每周一次,当系统负载较低时)删除旧记录。您可以将其安排为数据库中的作业或使用cron 或任何您喜欢的方法。

【讨论】:

  • 嘿,谢谢!我将尝试使用视图。我可以知道如何添加“- 间隔 7 天”。它应该与自创建日期以来经过的秒数有关,还是我们可以只添加 DD/MM/YYYY 格式的特定日期,然后系统可以计算经过的天数?如果您知道这一点,请编辑您的答案以解释如何实现这一点:)
  • @Saif 。 . .我不知道你的评论在问什么。您使用 now() - interval 7 day 减去 7 天。就是这样:dbfiddle.uk/….
  • 太棒了,谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-08-06
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
  • 2016-12-02
  • 1970-01-01
相关资源
最近更新 更多