我有一个简单的系统来监控和绘制来自MySQL服务器的统计数据。这些服务是用PHP编写的,并返回JSON。 我们坚持的问题是,今天是2014年7月1日...过去7天图表和表格中的值变为零。日期计算逻辑在表输出中给出正确的日期。我试图手动调用服务并检查,实际上JSON中的值都是零。 本模块中的大多数查询都使用以下内容:
$query_string = SELECT new_user_count AS new_user_count
FROM kpi_summaries
WHERE DATE(date) = CURDATE()-".$n."
AND data_type=1";
在一个简单的循环中,我使用此查询字符串来获取每天最后7天的值。直到昨天这个工作都很完美(因为我猜测,从CURDATE减去的日期都在同一个月)。
另一种表达我怀疑的方法是:使用CURDATE()是不正确的 - 3如果3天前是上个月的日期?如果这是错的,那么正确的方法是什么?我是否需要使用DATE_SUB()或类似的东西..?
答案 0 :(得分:3)
这是问题所在。 CURDATE()
- 尽管有外观和逻辑 - 但不会返回date
值。它返回一个字符串或数字。引用documentation:
将当前日期作为一个值返回到' YYYY-MM-DD'或YYYYMMDD 格式,取决于函数是用于字符串还是 数字上下文。
正在发生的事情是上下文需要-
的数字。所以,20140701 - 3是。 。 。 20140698.作为约会,这并不合理。它没有任何匹配。
通过添加interval
,我们给编译器一个提示,CURDATE()
应该是一个日期,并减去适当的天数。当然,使用诸如date_sub()
之类的函数会产生相同的效果。