代码之家  ›  专栏  ›  技术社区  ›  mrpatg

使用datetime和php在mysql数据库中选择1、7和30天前的记录

  •  10
  • mrpatg  · 技术社区  · 15 年前

    我使用下面的查询来定位比当前时间早X天的结果。

    SELECT  *,
            DATE_FORMAT(datetime, '%m/%d/%Y') 
       FROM table 
      WHERE datetime BETWEEN SYSDATE() - INTERVAL 30 DAY 
                         AND SYSDATE() 
    ORDER BY ID DESC
    

    问题是,如果正好30天前的记录不存在,它将返回当天的数据以及不相关的数据

    有没有更好的办法?

    2 回复  |  直到 15 年前
        1
  •  34
  •   Bill Karwin    15 年前

    BETWEEN 包括两个参数之间的所有值,包括两端的值。换句话说, BETWEEN 1 AND 4

    如果您只想要30天前的日期,请尝试以下操作:

    SELECT  *,
            DATE_FORMAT(datetime, '%m/%d/%Y') 
       FROM table 
      WHERE DATE(datetime) = CURDATE() - INTERVAL 30 DAY 
    ORDER BY ID DESC
    

    使用 CURDATE() 而不是 SYSDATE() 因为 返回不带时间组件的日期。

        2
  •  14
  •   OMG Ponies    15 年前

    您的查询设置为获取从今天(包括时间)到前30天之间的记录。

      SELECT *,
             DATE_FORMAT(datetime, '%m/%d/%Y') 
        FROM table 
       WHERE datetime <= DATE_SUB(SYSDATE(), INTERVAL 30 DAY)
    ORDER BY ID DESC
    

    如果你想要那些只有30天大的,而不是31或29天大的,不考虑时间部分-使用:

      SELECT *,
             DATE_FORMAT(datetime, '%m/%d/%Y') 
        FROM table 
       WHERE DATE_FORMAT(datetime, '%m/%d/%Y') = DATE_FORMAT(DATE_SUB(SYSDATE(), INTERVAL 30 DAY), '%m/%d/%Y') 
    ORDER BY ID DESC