我尝试使用以下代码在一天前删除数据行。
mysqli_query($this->db,"DELETE FROM posts WHERE UNIX_TIMESTAMP(created)<=DATE_SUB(NOW(), INTERVAL 1 DAY)") or die(mysqli_error($this->db));
但它每次都是在1天前删除所有行。我在这里做错了什么?
答案 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)
***假设created
是DATE
类型。*