按确切日期查询 MySQL


MySQL query by exact date

我正在查询我的数据库并尝试获取 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"这样的闰日,它会产生奇怪的结果。

请尝试此查询

  SELECT * FROM posts
        WHERE `user_id` = '$user_id' AND date(post_date) >=date_sub(CURDATE() , INTERVAL 1 YEAR)
        ORDER BY post_date DESC