MySQL按确切日期查询

时间:2015-03-16 12:29:35

标签: 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);

我能做些什么才能获得一年?如果我能找到一年的查询,我可以写一个循环来增加年份。

2 个答案:

答案 0 :(得分:2)

如果这是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&#39;它会产生奇怪的结果。

答案 1 :(得分:1)

请尝试此查询

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