Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除超过30天的mysql记录_Php_Mysql_Sql Delete - Fatal编程技术网

Php 删除超过30天的mysql记录

Php 删除超过30天的mysql记录,php,mysql,sql-delete,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"); 也许不是最漂亮的,但因为

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

也许不是最漂亮的,但因为你似乎将时间存储为整数。从现在开始减去30天,然后与该值进行比较怎么样:

DELETE 
FROM my_news 
WHERE `date` < (UNIX_TIMESTAMP() - (60 * 60 * 24 * 30))
删除
从我的新闻
其中'date`<(UNIX_TIMESTAMP()-(60*60*24*30))

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

mysql_query("DELETE FROM my_news WHERE date < ".strtotime('-1 month'));
mysql\u查询(“从我的新闻中删除日期<”.strotime('-1个月));
像这样做

 $time_ago = strtotime("-30 day");
 mysql_query("DELETE FROM my_news WHERE date < $time_ago");
$time\u ago=strottime(“-30天”);
mysql_查询(“从my_新闻中删除日期<$time_ago”);
尝试以下sql查询:

DELETE FROM my_news WHERE DATEDIFF(NOW() ,date )>30;
$expiretime=time()-2592000//1 * 60 * 60 * 24 * 30
mysql_查询(“从my_新闻中删除日期<”$expiretime);

尝试在
日期子()的第二个参数中使用
日期间隔\u从日期字符串(“1个月”)创建时间间隔
而不是间隔1个月,当您使用
INTERVAL 1 MONTH
时,您将删除4月1日Mars 31日添加的记录

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

DELETE FROM my_news WHERE date < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY))
从my_news中删除,其中日期
试试这个

mysql_query("DELETE FROM my_news WHERE date < DATE_SUB(NOW(), INTERVAL 30 DAY)");
mysql\u查询(“从我的新闻中删除日期
您的SQL很好,但您混淆了数据类型。只需调用
UNIX\u TIMESTAMP(date)

require('../conn_db.php');
mysql_select_db(“我的新闻”,康涅狄格州美元);
mysql_查询(“设置名称utf8”);
mysql_查询(“从my_news中删除,其中日期
mysql\u查询(“从我的新闻中删除日期
您显示的内容看起来不错,但根本不起作用:它应该抛出语法错误,因为
date
是一个保留字。你确定你在看正确的查询吗?使用
设置名称
正是
mysql\u real\u escape\u string()
不安全的原因。使用int而不是date数据类型来存储日期有什么原因吗?你说的是“30天”和“月”,它们在50%的情况下是不一样的。你真的想删除这些数据吗?难道你不想在SELECT上做这个WHERE子句来阅读你的新闻条目吗;有两种不同的方法,要么使用PHP提供的服务器时间,要么使用mysql提供的服务器时间。即使它们在同一台机器上,它们也可能彼此不同。我想对此进行修正,因为这是第一个解释OP方法为什么不起作用的答案,但取一个时间戳,减去30天,格式化它,然后将其转换回时间戳,这太笨重了。我同意,它很重,很难看,但是它解决了这个问题,而不需要OP改变他的表结构,并且它与他最初的查询没有太大的偏差。
DELETE FROM my_news WHERE date < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY))
mysql_query("DELETE FROM my_news WHERE date < DATE_SUB(NOW(), INTERVAL 30 DAY)");
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");
mysql_query("DELETE FROM my_news WHERE date < DATE_SUB(CURDATE(), INTERVAL 1 MONTH)");