2012-03-26 102 views
14

我不知道从哪里开始:如何在时间流逝后删除mysql行?

我有一个数据库,存储postIDDate

我想要做的是让我的网站自动删除所有行,其中Date比今天少。该脚本根本不能有任何用户输入。没有按钮点击,什么都没有。脚本必须每天午夜运行。

我一直在寻找这样做的东西,我什么都没发现。

+0

有许多方面的这个:之后您可以通过mysql命令使用一样随时删除不需要的数据(1)写的'DELETE'声明; (2)创建一个运行'DELETE'语句的脚本; (3)设置脚本在午夜每晚运行。你需要哪些帮助? – ruakh 2012-03-26 00:56:49

+0

我需要帮助来弄清楚如何让我的代码在没有用户输入的情况下自动触发。下面的答案都指向了CRON,所以我会研究一下。 – Sweepster 2012-03-26 01:57:22

回答

19

您可以使用PHP脚本并在您的cPanel上使用cron作业。

示例:

cronjobcommand。php

<?php 
include 'your_db_connection'; 
mysql_query("DELETE FROM your_table_name WHERE Date < NOW()"); 
?> 

我附上了一张截图,供您参考。

enter image description here

0

您应该为它设置cron作业(计划粘性)。

A cron job是一个用于Linux和Unix操作系统的自动程序设置。它允许用户在特定的时间和日期执行多个命令或功能。

你在你的cPanel设置中有cron作业。首先你需要在每个日期之后用你的逻辑创建一个删除记录的php脚本。从服务器取出日期并写入脚本以进行删除。

然后转到您cPanel中的cron选项卡,并设置时间间隔来运行cron并提供您的php脚本文件的路径。

2

大多数主机提供cron(8)服务,可以在特定时间执行命令。您可以使用crontab(1)程序来管理运行哪些命令时描述的crontab(5)文件。

有很多可用的功能,但是如果你编写一个运行相应MySQL命令的程序(shell脚本,php脚本,C程序,无论什么),你可以通过cron(8)完全手动调用程序,关闭时尚。

运行crontab -e编辑您当前的crontab(5)文件。如果不存在,希望你会得到一个有用的标题。如果没有,请复制:

# m h dom mon dow command 

这些列指示执行命令的分钟,小时,月,月和星期几。列中的所有数字基本上都进行了与运算,以决定何时运行命令。

因此,每晚午夜应该是这样的:

0 0 * * * /path/to/executable 

这是非常灵活的,所以把一些时间到文档中,你会发现许多用途为它。

-2

MySQL没有任务调度程序。因此,您必须使用操作系统的任务计划程序(Linux下的CRON),或者在主页脚本(应显示不断变化的数据的另一个页面)期间午餐基本任务检查器子脚本。

+4

这是不正确的。 MySQL有一个事件调度器,在5.1.6版本(2006-02-01)中实现。更多信息:[MySQL Event Scheduler](http://dev.mysql.com/doc/refman/5.1/en/events.html)。 – devrique 2014-08-24 15:58:50

4

对于那些在那里谁是一个共享的主机,喜欢的1and1的,并且不能使用cron,这里有2备选方案:

  • mysql events让你把一个时间触发在mysql上,它会在你想要的时候执行,而不必被任何类型的用户输入引发

  • 如果你不能创建mysql事件,因为你在1and1 :(另一种方法是使用webcron

你只需要告诉webcron你想运行的PHP脚本的URL,他们会在间隔触发它为你想要的

3

为什么使用日常cronjobs? ?为什么不过滤输出数据。例如,在您选择检查,如果发布日期等于今天与添加一个简单的where:你不要求做任何特殊的时刻你的数据库管理人员/ cronjobs

SELECT * FROM `posts` 
WHERE (DATE(`post_date`) = DATE(NOW())); 

这样,这将是仅用于数据库管理。

DELETE FROM `posts` WHERE (
    DATE(`post_date`) < DATE(NOW()) 
) 
+0

假设,我有这种情况,在我的数据库中,我有记录在特定日期发布,需要在某个特定截止日期删除。你会做什么来运行脚本automaticaly? – 2016-07-29 15:11:14

+0

@sudhakarphad对不起,我迟到了;在这种情况下,您可以将截止时间添加到比较(post_date +截止时间)。 – 2016-08-28 07:08:39