一个不工作的mysql删除查询。为什么?

时间:2011-06-15 18:46:51

标签: php mysql timestamp sql-delete

我有一个包含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'");

5 个答案:

答案 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之间的任何时间差异,如果它们都在不同的时区运行