选择MySQL中所有10天前的条目。

5

大家好,我正在开发一个小脚本,需要检查MySQL数据库中的数据是否至少比现在早10天。 表格中有一个时间戳字段(我想使用它,但如果需要的话可以更改)。 我目前正在使用以下SQL语句:

SELECT * 
FROM entries 
WHERE tag='$tag' 
  AND DATE(last_update) > DATE_SUB(CURDATE(), INTERVAL 10 DAY)

但我发现一些选择的条目“年龄”不到10天,所以可能是我搞错了什么。

这样做是否正确?或者最好通过PHP检查(而不是使用MySQL查询)?

提前感谢。


你能提供一个例子吗?比如 CURDATE() = XDATE(last_update)=Y,那么一个错误的 Y 的例子是什么? - apokryfos
我无法确定这一点,因为last_update字段每次都在“更新”,我得到的唯一线索是我有一个“帖子计数”字段,每次都会增加,我发现其中一些计数增加太多。 - Matteo Bononi 'peorthyr'
1
通常在数据库 shell 中测试查询是很有帮助的。这通常不会改变数据。 - apokryfos
3个回答

29

10天前之前的内容应该在计算的日期之前。

SELECT * FROM entries 
WHERE tag='$tag' AND DATE(last_update) < DATE_SUB(CURDATE(), INTERVAL 10 DAY)

嗯...你是对的...我想我弄错了什么。 - Matteo Bononi 'peorthyr'
即使 last_update 是一个 dateTime,你也不需要使用 Date()。 - Gautier
3
每次我谷歌搜索时,我都会想为什么它这么复杂。我的意思是,在理想的世界中,语法应该像DATE>10d一样简单明了。 - Arsen Ibragimov
@ArsenIbragimov,因为它是一种“简单”的查询语言。在制作它时,他们想要创建一个可以轻松被人类阅读的东西...但显然失败了。 - Pyromonk

2

你也可以使用DATEDIFF()函数:

SELECT * 
FROM entries 
WHERE tag='$tag' 
AND DATEDIFF(CURDATE(), DATE(last_update)) > 10

0

您也可以考虑查询并添加负间隔值:

SELECT * 
FROM entries 
WHERE tag='$tag' 
  AND DATE(last_update) > DATE_SUB(CURDATE(), INTERVAL -10 DAY)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接