Php 间隔30天未给出预期结果

Php 间隔30天未给出预期结果,php,mysql,date,intervals,between,Php,Mysql,Date,Intervals,Between,我对MySQL日期和日期格式比较熟悉 但是,当使用INTERVAL-30 DAY对日期范围运行查询时,am要么没有得到正确的输出,要么抛出错误。进一步查看表格,了解date_buy的每一行都采用这种格式: 2015年9月9日星期一等。我尝试使用PHP date'D F Y'代替DATENOW等,但无法解决问题。是否有其他已知的解决方法 是的,我试过买x和买y之间的日期。即使表中有记录,它也不返回任何内容 SELECT SUM(sales_total), date_buy FROM `Sebast

我对MySQL日期和日期格式比较熟悉

但是,当使用INTERVAL-30 DAY对日期范围运行查询时,am要么没有得到正确的输出,要么抛出错误。进一步查看表格,了解date_buy的每一行都采用这种格式: 2015年9月9日星期一等。我尝试使用PHP date'D F Y'代替DATENOW等,但无法解决问题。是否有其他已知的解决方法

是的,我试过买x和买y之间的日期。即使表中有记录,它也不返回任何内容

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales` 
WHERE date_buy >= $date - INTERVAL 30 DAY 
GROUP BY date_buy

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales` 
WHERE date_buy BETWEEN date_buy_x && date_buy_y
GROUP BY date_buy ORDER BY date_buy DESC
更新

因此,根据这些建议,并进一步研究DATE_格式和CURDATE参数,我们能够显示数据。ORDER BY还必须为DATE_FORMATdate_buy,“%a%d%M%Y”才能正确输出。然而,关于间隔30天参数的问题仍然存在

WHERE datebuy <= DATE_FORMAT(CURDATE() - INTERVAL 30 DAY,'%a %d %M %Y')
GROUP BY date_buy ORDER BY DATE_FORMAT(date_buy, '%a %d %M %Y') DESC
当输出仅应为:

Mon 03 August 2015 (10 sales)

你可以想象:

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales` 
WHERE DATE(STR_TO_DATE(date_buy, '%a %d %M %Y')) >= $date - INTERVAL 30 DAY 
GROUP BY date_buy
除非$date也是此字符串格式,否则在这种情况下,您也需要对其使用STR_to_date函数

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales` 
WHERE DATE(STR_TO_DATE(date_buy, '%a %d %M %Y')) >= DATE(STR_TO_DATE($date, '%a %d %M %Y')) - INTERVAL 30 DAY 
GROUP BY date_buy
日期子项如何,查询时使用日期格式到相同的格式

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales` 
WHERE DATE_FORMAT(DATE(date_buy,'%Y %m %d')) >= DATE_FORMAT(DATE_SUB(DATE($date,INTERVAL 30 DAY),'%Y %m %d'))  
GROUP BY date_buy

不要将日期存储为字符串!恐怖修复日期存储,其他所有操作都将修复其selfDagon。该解决方案需要这种特定的日期格式来跨页面显示其他内容,这就是它以这种方式存储的原因。在行中修复当前日期将是一件痛苦的事情。写一些东西从该字段中读取日期,对其进行解析,并将其以正确的日期格式保存到一个新字段中,从现在起您将使用该字段。需要在多个页面中以该格式显示日期意味着您使用带有日期\格式的select语句。。。要将其转换为该格式,而不是以该格式存储。正确。我从另一家开发公司继承了这一点。我试图找到一种烫发疗法,而不是绷带。我的第一个想法是按照建议解析当前格式,删除日期部分,然后更新所有记录,但我想看看是否有其他更相关的解决方案。我完全忽略了%a。我确实尝试了%W,结果是漫长的一天。{{face plams self}}。谢谢你,伙计。希望你没有太多的数据,因为这是一个性能杀手。我会使用STR_TO_DATE来解析日期,更新一个新字段,然后切换字段,或者类似的东西,因为不断在where子句中进行转换会影响性能
SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales` 
WHERE DATE_FORMAT(DATE(date_buy,'%Y %m %d')) >= DATE_FORMAT(DATE_SUB(DATE($date,INTERVAL 30 DAY),'%Y %m %d'))  
GROUP BY date_buy