我想在一年内每天获取数据,但我必须每天使用365个查询,例如:
for ($i = 0; $i<365; $i++){
$end_day = ...; // the end time of each day
$start_day = ...; // the start time of each day
$query = select count(*)....where created < $end_day AND created > $start_day
}
Run Code Online (Sandbox Code Playgroud)
我认为我目前的解决方案使系统变得非常慢.有没有办法只使用一个查询?
假设您创建的列是DATETIME或TIMESTAMP,并且存储的数据比一天更细粒度:
SELECT COUNT(*) ... 按年(已创建)、月(已创建)、日(已创建)分组
COUNT 是一个聚合函数,适用于每个组,即每个组有一行,该行将包含该组中的记录数。由于我们一天做了一个组,这就是您想要的数据。
您不能仅按 DAY(created) 进行分组,因为 DAY 返回月份中的日期,因此我们还需要输入月份和年份以确保日期是离散的。
您可能希望使用 WHERE 创建 > $start AND 创建 < $finish 来将其限制在某个时间范围内(或 WHERE YEAR(created) == 2010)。
参考:
http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html