删除超过30天的mysql记录

时间:2012-03-16 09:41:48

标签: php mysql sql-delete

如何删除超过30天的mysql记录?我的代码将删除昨天插入的所有记录。

require('../conn_db.php');
mysql_select_db("my_news",$conn);
mysql_query("SET NAMES utf8");
mysql_query("DELETE FROM my_news WHERE date < DATE_SUB(NOW(), INTERVAL 1 MONTH)");
mysql_close("my_news");

和mysql表

date int(10)
1321095600
1322107200
...
1328288400
1328290440

10 个答案:

答案 0 :(得分:7)

首先,如果您确实要删除超过30天的记录,请改用INTERVAL 30 DAY,当您使用INTERVAL 1 MONTH时,您将删除在Mars 31st上添加的记录,当时它是4月1日。

此外,您的日期列的类型为int,而DATE_SUB()将返回此格式YYYY-MM-DD HH:MM:SS的日期,因此它们无法比较。你可以这样做来解决这个问题:

DELETE FROM my_news WHERE date < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY))

答案 1 :(得分:3)

试试这个。

mysql_query("DELETE FROM my_news WHERE date < DATE_SUB(NOW(), INTERVAL 30 DAY)");

答案 2 :(得分:2)

您的MySQL表不存储日期,而是存储unix时间戳(根据您提供的数据判断)。要删除,请执行以下操作:

mysql_query("DELETE FROM my_news WHERE date < ".strtotime('-1 month'));

答案 3 :(得分:2)

您的SQL很好但是您的数据类型很混乱。只需拨打UNIX_TIMESTAMP(date)http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp

即可
require('../conn_db.php');
mysql_select_db("my_news",$conn);
mysql_query("SET NAMES utf8");
mysql_query("DELETE FROM my_news WHERE date < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 MONTH))");
mysql_close("my_news");

答案 4 :(得分:1)

也许不是最漂亮的,但是因为你似乎将你的时间存储为int。如何从现在开始减去30天,并与该值进行比较:

DELETE 
FROM my_news 
WHERE `date` < (UNIX_TIMESTAMP() - (60 * 60 * 24 * 30))

答案 5 :(得分:1)

就像

一样
 $time_ago = strtotime("-30 day");
 mysql_query("DELETE FROM my_news WHERE date < $time_ago");

答案 6 :(得分:1)

$expiretime = time() - 2592000; //1 * 60 * 60 * 24 * 30
mysql_query("DELETE FROM my_news WHERE date < ".$expiretime);

答案 7 :(得分:0)

试试这个SQL查询:

DELETE FROM my_news WHERE DATEDIFF(NOW() ,date )>30;

答案 8 :(得分:0)

尝试在date_interval_create_from_date_string('1 MONTH')的第二个参数中使用DATE_SUB()而不是INTERVAL 1 MONTH。

答案 9 :(得分:-1)

mysql_query("DELETE FROM my_news WHERE date < DATE_SUB(CURDATE(), INTERVAL 1 MONTH)");