1天后自动删除行不能使用php工作

时间:2017-10-15 05:41:18

标签: php mysql

我尝试使用以下代码在一天前删除数据行。

mysqli_query($this->db,"DELETE FROM posts WHERE UNIX_TIMESTAMP(created)<=DATE_SUB(NOW(), INTERVAL 1 DAY)") or die(mysqli_error($this->db));

但它每次都是在1天前删除所有行。我在这里做错了什么?

enter image description here

2 个答案:

答案 0 :(得分:2)

由于created列显然已经在几秒钟内,因此要比较日期,您应该在MySQL查询中使用FROM_UNIXTIME(created)而不是UNIX_TIMESTAMP(created)。例如,请参阅:https://www.w3resource.com/mysql/date-and-time-functions/mysql-from_unixtime-function.php并与https://www.w3resource.com/mysql/date-and-time-functions/mysql-unix_timestamp-function.php进行比较。

如果要删除前一天清除的所有行,则WHERE条件<=DATE_SUB(NOW(), INTERVAL 1 DAY)条件正常。但是,如果您只想删除1天前清除的行,同时保留超过1天前创建的行,则可以使用=DATE_SUB(NOW(), INTERVAL 1 DAY)代替。

所有这些都假定被比较日期的时区设置为相同。

答案 1 :(得分:1)

这是UNIX_TIMESTAMP()

在比较的两边使用它

DELETE FROM table 
WHERE UNIX_TIMESTAMP(created)<=UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))

或双方

DELETE FROM table WHERE created<=DATE_SUB(NOW(), INTERVAL 1 DAY)

***假设createdDATE类型。*