所以基本上我试图在我的销售页面上进行自动过期,我有这个sql;
DELETE
FROM `game_sales`
WHERE `expires` <= NOW()
AND `expires` > 0
似乎删除了expires > 0
的所有行,无论expires
是否低于当前时间。
我该怎么办?
答案 0 :(得分:4)
您根本无法将INT
与DATETIME
(NOW()
返回)进行比较。
如果您的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相比,它应该比较你的时间的毫秒值。
您是否以毫秒为单位存储时间?