Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用datetime和php在mysql数据库中选择1、7和30天前的记录_Sql_Mysql_Datetime - Fatal编程技术网

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

使用datetime和php在mysql数据库中选择1、7和30天前的记录,sql,mysql,datetime,Sql,Mysql,Datetime,Im使用以下查询来定位比当前时间早X天的结果 SELECT *, DATE_FORMAT(datetime, '%m/%d/%Y') FROM table WHERE datetime BETWEEN SYSDATE() - INTERVAL 30 DAY AND SYSDATE() ORDER BY ID DESC 问题是,如果恰好30天前的记录不存在,它将返回当天的数据,以及不相关的数据 有更好的方法吗?您的查询

Im使用以下查询来定位比当前时间早X天的结果

SELECT  *,
        DATE_FORMAT(datetime, '%m/%d/%Y') 
   FROM table 
  WHERE datetime BETWEEN SYSDATE() - INTERVAL 30 DAY 
                     AND SYSDATE() 
ORDER BY ID DESC
问题是,如果恰好30天前的记录不存在,它将返回当天的数据,以及不相关的数据


有更好的方法吗?

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

如果希望记录的时间超过30天(截止时间),请使用:


BETWEEN
包括两个参数之间的所有值,包括两端的值。换句话说,介于1和4之间的
包括值1、2、3和4。不仅仅是1和4,也不仅仅是2和3

如果您只想要30天前的某一天的日期,请尝试以下方法:

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

使用
CURDATE()
而不是
SYSDATE()
,因为
CURDATE()
返回一个没有时间组件的日期。

如果通过一个无函数代码运行datetime列,则使用CURDATE是没有意义的,但是如果
datetime
列上存在索引,则无法使用索引。第一个查询获取的所有内容>=30天。您可能希望使用>=获取今天、sysdate()和30天之间的所有内容。您需要使用=来获取正好30天前的信息。
  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
SELECT  *,
        DATE_FORMAT(datetime, '%m/%d/%Y') 
   FROM table 
  WHERE DATE(datetime) = CURDATE() - INTERVAL 30 DAY 
ORDER BY ID DESC