2011-06-15 106 views
1

我有一个3行的表,其中一个包含一个唯一的时间码(例如:1308162911)。这些记录有很多,但我想删除所有大于一天的记录(也就是86400秒)。我有这个疑问,但它不工作(没有任何反应):不工作的mysql删除查询。为什么?

$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

您在哪里定义'$ tbl'?你什么时候运行查询? – 2011-06-15 18:49:12

+1

$ tbl未在您所包含的示例中定义。你能证实它是?另外,执行查询的'mysql_query()'调用在哪里? “时间”字段是INT吗? – 2011-06-15 18:50:12

+1

如果'time'是一个'INT',你不应该删除引号吗? – Ryan 2011-06-15 18:51:46

回答

1

的Unix随着时间的推移,以便您的查询将删除所有记录超过24小时更近,不超过24小时的时间戳增加前。

您应该可以删除时间戳值附近的单引号。

如果你仍然有问题,请你能包括执行mysql_query()代码行和数据库的格式(的SHOW CREATE TABLE myTable输出)

+0

是的谢谢,我一直很无知:( – faq 2011-06-15 19:08:54

1

我不知道关于MySQL,但可能需要类似的东西:

DELETE FROM $tbl WHERE DATEDIFF('$now', time) > INTERVAL 1 DAY 
1

怎么是这样的:

$yesterday = strtotime('-1 day'); 

$delete = "DELETE FROM $tbl WHERE time > FROM_UNIXTIME($yesterday)"; 

上面的查询将删除所有行“时间”值比24小时前大。这假定“时间”字段是TIMESTAMP,DATETIME或DATE类型。如果您想要删除较旧版本的记录,请更改> <。

+0

我很感谢你的回答 – faq 2011-06-15 19:21:33

1
select * from table 
where now() - interval 1 day > from_unixtime(unix_timestamp_field) 

,如果这是你找谁转换到选择删除查询

+0

我很感谢你的回答 – faq 2011-06-15 19:21:15

+0

很高兴我可以帮助:) – 2011-06-15 19:35:27

1

什么这应该工作:

DELETE FROM $tbl 
WHERE FROM_UNIXTIME(`time`) > DATE_SUB(NOW(), INTERVAL 1 DAY); 

或以其他方式在你的代码,我想你应该删除现在是$左右的单引号。不过,我认为这是一个好主意,作为MySQL查询的一部分,以避免PHP和MySQL之间的任何时间差异,如果它们都运行在不同的时区