这个SQL似乎删除了字段大于0的所有行

时间:2013-08-19 14:52:47

标签: mysql sql

所以基本上我试图在我的销售页面上进行自动过期,我有这个sql;

DELETE 
FROM `game_sales` 
WHERE `expires` <= NOW() 
  AND `expires` > 0

似乎删除了expires > 0的所有行,无论expires是否低于当前时间。

我该怎么办?

2 个答案:

答案 0 :(得分:4)

您根本无法将INTDATETIMENOW()返回)进行比较。

如果您的expires实际上是时间戳,您可以:

  • 使用DATETIME将时间戳转换为FROM_UNIXTIME()WHERE FROM_UNIXTIME(expires) <= NOW()

  • DATETIME转换为整数:WHERE expires <= UNIX_TIMESTAMP(NOW())

第二种选择肯定是首选。对于此版本,大多数查询应该能够使用expires上的索引(而第一个版本肯定会阻止在此列上使用索引)。< / p>

答案 1 :(得分:0)

您的SQL查询仅选择数据,但不会删除它。 WHERE条件返回与BOTH条件匹配的数据,所以我会查找你的expires&lt; NOW()声明。

expires < NOW()给出了expiredate之前所有的条目

expires > 0为您提供大于0的所有过期值

编辑: 随着时间的推移,你已经遇到了问题。 NOW()datetime数据类型返回值。 与int相比,它应该比较你的时间的毫秒值。

您是否以毫秒为单位存储时间?