【问题标题】:Delete records from database older than 1 hour doesn't delete all records从数据库中删除超过 1 小时的记录不会删除所有记录
【发布时间】:2016-10-06 09:12:40
【问题描述】:

我有一个简单的脚本,它应该删除所有超过 1 小时的订单并且不提供字符串。问题是超过 1 小时但在今天(当前日期)下的订单不会被删除。它删除了昨天的所有记录。这是我的查询

$select = "DELETE FROM orders              
           WHERE created_at < DATE_SUB( CURDATE( ) , INTERVAL 1 HOUR ) 
           AND tx = ''";

$conn->exec($select);

created_attimestamp 中,看起来像2016-10-06 08:33:14

我的订单是created_at - 2016-10-06 08:33:14,当前日期和时间是2016-10-06 12:10:23,但如果我将此订单的日期更改为2016-10-05 12:10:23,即昨天,它将被删除。

这可能是什么问题?

【问题讨论】:

  • 你确定 tx 是 '' 而不是 NULL?
  • 曾经尝试过select * from orders WHERE created_at &lt; DATE_SUB( CURDATE( ) , INTERVAL 1 HOUR ) AND tx = ''
  • select * from orders WHERE created_at &lt; DATE_SUB( CURDATE( ) , INTERVAL 1 HOUR ) AND tx = ''" 返回 0 行
  • select * from orders WHERE created_at &lt; DATE_SUB( CURDATE( ) , INTERVAL 1 HOUR ) AND tx IS NULL 也返回 0 行
  • whit tx = '' 我的意思是当此列中没有任何内容时,即为空。但是如果用户没有输入任何内容,则该列不会被定义为 NULL。它只是空的

标签: mysql


【解决方案1】:

我相信curdate() 只返回日期而不是时间:http://www.w3schools.com/sql/func_curdate.asp

即您实际上是在删除早于昨天23:00 的订单

更改为使用NOW() 而不是CURDATE() 可能会有所帮助。

【讨论】:

  • 啊,你是对的。用NOW()今天的记录被删除。
猜你喜欢
  • 2013-05-05
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
相关资源
最近更新 更多