我有一个表,其中有一个名为created DATETIME
的列,当添加条目时它工作正常,但是当它到达日期间隔时,它会继续复制新条目。我正在尝试获取今天和昨天的条目。今天的工作正常,但是对于昨天的,它还在查询结果中添加了今天的内容,这不是我想要的。
SELECT * FROM tab WHERE created > DATE_SUB(NOW(), INTERVAL $num DAY) ORDER BY created DESC LIMIT 9;
$num
对于今天的条目来说是 1,对于昨天的条目来说是 2。因此基本上今天创建的条目会在昨天的查询结果中重复。
最佳答案
您正在从数据库中获取您请求的结果。即大于今天减去您输入的天数的任何记录。
当您尝试 @KenWhite 建议将 >
更改为 =
时,您得到 0 条记录的原因是因为您的字段是 DATETIME,因此从 NOW 中减去 24 小时( )产生昨天相同的确切时间,并且您可能没有在昨天这个时间精确写入的记录。对吗?
您需要做的是测试两个日期之间的记录以获得您想要的结果。切换到 CURDATE(),而不是 NOW(),这样您就可以放心获得您正在查找的日期时间范围内的每条记录。
SELECT *
FROM tab
WHERE
created BETWEEN DATE_SUB(CURDATE(), INTERVAL $num DAY) AND DATE_SUB(CURDATE(), INTERVAL $num - 1 DAY)
ORDER BY created DESC LIMIT 9;
您可以在此处查看 SQLFiddle:http://sqlfiddle.com/#!2/19d9b/12
关于mysql - 日期间隔错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594226/