如何删除超过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
答案 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)");