php - MySQL 按确切日期查询

标签 php mysql date blogs

我正在查询我的数据库并尝试获取恰好 1 年前的博客文章(更具体地说是每年至今),以下代码应该根据我发现的内容执行此操作,但它却获取了最后的所有文章年。

$sql = "SELECT * FROM posts
    WHERE `user_id` = '$user_id' AND post_date > CURDATE() - INTERVAL 1 YEAR
    ORDER BY post_date DESC ";
    $result = $dbc->query($sql);

我该怎么做才能得到正好一年?如果我能计算出恰好查询一年,我可以编写一个循环来递增年份。

最佳答案

如果这是 WordPress,post_date 是 DATETIME 字段。所以 整整一年前 表示“2014-03-16 09:03:27”。我怀疑那是你想要的。我想你希望在去年的今天。

试试这个:

     post_date >= CURDATE() - INTERVAL 1 YEAR
 AND post date <  CURDATE() - INTERVAL 1 YEAR + INTERVAL 1 DAY

这对条件采用从一年前的那一天午夜开始的所有帖子,直到但不包括第二天的午夜。 MySQL 通过高效的索引范围扫描来实现它们。

如果您要查找任何一年中某一天发生的帖子,您需要这种表达方式。

      MONTH(CURDATE())      = MONTH(post_date) 
  AND DAYOFMONTH(CURDATE()) = DAYOFMONTH(post_date)

这不会像我的第一个建议那样快,因为它不能使用索引。此外,对于像“2016-02-29”这样的闰日,它会产生奇怪的结果。

关于php - MySQL 按确切日期查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29076842/

相关文章:

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

php - 显示过去 7 天 PHP 的结果

mysql - 有什么方法可以在不使用自增字段或时间戳的情况下从 MySQL 表中获取最后 N 行?

r - 将儒略日期转换为数据框中的日历日期

iphone - 如何获取 iPhone 中的实时时间,而不是用户在“设置”中设置的时间?

java - Joda Time : new DateTime(String) vs DateTime. 解析(字符串)

php - 使用 Joomla 展示产品

php - Cron Job 循环没有从 mysqli 对象中获取任何信息,但 print_r 表示有行;在浏览器中运行时完美运行

php - 我的 SQL 查询在获取数据时使用异常

php - 有没有办法同时清理多个变量?