【问题标题】:MySQL query to select records newer than x daysMySQL查询以选择比x天新的记录
【发布时间】:2014-12-17 00:03:33
【问题描述】:

如果这听起来像是一个非常基本的问题,我很抱歉,但由于某种原因,今天我真的很难理解这个问题。我有一个带有date_added 列的数据库表,格式为2014-09-30 20:39:17,我有一个带有用户过滤选项的网页。基本上我想使用变量来选择不同的日期范围,如下所示:

SELECT * FROM table WHERE date_added = /* EVERYTHING POSTED TODAY */
SELECT * FROM table WHERE date_added = /* EVERYTHING POSTED WITHIN LAST 7 DAYS */
SELECT * FROM table WHERE date_added = /* EVERYTHING POSTED WITHIN LAST 30 DAYS */

我需要投入什么才能让这些变量发挥作用?

【问题讨论】:

标签: php mysql sql datetime


【解决方案1】:

您可以使用CURDATE() 和非常简单的INTERVAL 算术。

在以下示例中,假设查询是在 2014-10-21 22:25:28 处执行的:

SELECT * FROM table WHERE date_added >= CURDATE()
                                  -- >= 2014-10-21 00:00:00

SELECT * FROM table WHERE date_added >= NOW() - INTERVAL 24 HOUR
                                  -- >= 2014-10-20 22:25:28

SELECT * FROM table WHERE date_added >= CURDATE() - INTERVAL 7 DAY
                                  -- >= 2014-10-14

SELECT * FROM table WHERE date_added >= CURDATE() - INTERVAL 30 DAY
                                  -- >= 2014-09-21

【讨论】:

  • 谢谢,这种编码对我来说很有意义,但不幸的是它不能正常工作。即使我在 1 个多月前发布它,它仍然显示该帖子
  • 我希望日期存储为...日期!不是 varchar 什么的。
  • 再次测试它可能是我使用它的方式。我有if($filter == "all"){$sql_var = "";} else if($filter == "day"){$sql_var == " WHERE added >= CURDATE()";} else if($filter == "week"){$sql_var == " WHERE added >= CURDATE() - INTERVAL 7 DAY";} else if($filter == "month"){$sql_var == " WHERE added >= CURDATE() - INTERVAL 30 DAY";} 和使用SELECT * FROM news $sql_var
  • 啊,是的,感谢您指出这一点!我知道我在某个地方出错了
  • 如何在日期之间使用它?我正在使用WHERE added BETWEEN CURDATE() - INTERVAL 7 DAY AND CURDATE() - INTERVAL 30 DAY ORDER BY added DESC,但它没有给出正确的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多