0

所以基本上我想在我的销售页面上自动到期,我有这个 sql;

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

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

我怎样才能阻止这个?

4

2 回答 2

4

您根本无法将 aINT与 a进行比较DATETIME(这是NOW()返回的内容)。

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

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

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

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

于 2013-08-19T15:08:30.073 回答
0

您的 SQL 查询只选择数据,它不会删除它。WHERE 条件返回与 BOTH 条件匹配的数据,因此我会查找您的 expires < NOW() 语句。

expires < NOW()给出过期日期在现在之前的所有条目

expires > 0给你所有大于 0 的过期值

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

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

于 2013-08-19T14:59:22.710 回答