所以基本上我想在我的销售页面上自动到期,我有这个 sql;
DELETE
FROM `game_sales`
WHERE `expires` <= NOW()
AND `expires` > 0
expires > 0
无论expires
是否低于当前时间,它似乎都会删除所有行。
我怎样才能阻止这个?
您根本无法将 aINT
与 a进行比较DATETIME
(这是NOW()
返回的内容)。
如果您expires
实际上是时间戳,则可以:
将时间戳转换为DATETIME
with FROM_UNIXTIME()
:WHERE FROM_UNIXTIME(expires) <= NOW()
将 转换为DATETIME
整数:WHERE expires <= UNIX_TIMESTAMP(NOW())
第二种选择当然是首选。使用此版本,大多数查询应该能够使用索引expires
(而第一个版本肯定会阻止在此列上使用索引)。
您的 SQL 查询只选择数据,它不会删除它。WHERE 条件返回与 BOTH 条件匹配的数据,因此我会查找您的 expires < NOW() 语句。
expires < NOW()
给出过期日期在现在之前的所有条目
和
expires > 0
给你所有大于 0 的过期值
编辑:使用 int 时间,您已经遇到了问题。
NOW()
返回datetime
数据类型中的值。与 int 相比,它应该比较您时间的毫秒值。
您是否以毫秒为单位存储时间?