【问题标题】:MySQL select all the entries older than 10 daysMySQL选择所有超过10天的条目
【发布时间】:2016-04-11 09:45:47
【问题描述】:

大家好,我正在开发一个小脚本,它必须检查 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 的例子是什么?
  • 我不知道这一点,因为 last_update 字段每次都在“更新”,我得到错误行为的唯一线索是我有一个“post count”字段,每次都会增加,我发现其中一些计数增加了太多
  • 在 DB shell 中测试查询通常很有帮助。它通常不会改变数据。

标签: php mysql


【解决方案1】:

older than 10 days 应该是before 计算日期。

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

【讨论】:

  • 嗯...你是对的...我想我搞砸了。
  • 即使 last_update 是 dateTime 你也不需要 Date()
  • 每次我谷歌我都想知道为什么它这么复杂。我的意思是在理想的世界语法应该像 DATE>10d
  • @ArsenIbragimov,因为它是一种“简单”查询语言。当他们制作它时,他们想创造一种人类可以轻松阅读的东西......显然失败了。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    你也可以使用 DATEDIFF():

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 2015-12-25
      • 2014-08-07
      • 2011-10-19
      • 1970-01-01
      相关资源
      最近更新 更多