我有一个包含3行的表,其中一行包含唯一的时间码(例如:1308162911)。有很多这些记录,但我想删除所有大于一天的记录(AKA 86400秒)。我有这个查询,但它不起作用(没有任何反应):
$db = mysql_connect($hostname, $db_user, $db_password);
mysql_select_db($database,$db)or die( "Unable to select database");
$now = time() - 86400;
$delete = ("DELETE FROM $tbl WHERE time > '$now'");
答案 0 :(得分:1)
随着时间的推移,Unix时间戳会增加,因此您的查询将删除所有超过24小时前的记录,不会超过24小时之前。
您也可以删除时间戳值周围的单引号。
如果您仍然遇到问题,请列出执行mysql_query()
的代码行和数据库的格式(SHOW CREATE TABLE myTable
的输出)
答案 1 :(得分:1)
我不确定MySQL,但可能你需要类似的东西:
DELETE FROM $tbl WHERE DATEDIFF('$now', time) > INTERVAL 1 DAY
答案 2 :(得分:1)
这样的事情怎么样:
$yesterday = strtotime('-1 day');
$delete = "DELETE FROM $tbl WHERE time > FROM_UNIXTIME($yesterday)";
上述查询将删除“time”值大于24小时前的所有行。这假定“time”字段是TIMESTAMP,DATETIME或DATE类型。如果您要删除较旧的记录,请更改>对于<。
答案 3 :(得分:1)
select * from table
where now() - interval 1 day > from_unixtime(unix_timestamp_field)
如果您正在寻找将select转换为删除查询
答案 4 :(得分:1)
这应该有效:
DELETE FROM $tbl
WHERE FROM_UNIXTIME(`time`) > DATE_SUB(NOW(), INTERVAL 1 DAY);
或者,在您的代码中,我认为您应该删除$周围的单引号。但是,我认为最好将它作为MySQL查询的一部分来完成,以避免PHP和MySQL之间的任何时间差异,如果它们都在不同的时区运行