如何在一年内每天只使用一个查询来获取数据?

问题描述:

我希望每天起床一年内落后的数据,但我必须使用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 
} 

我认为我目前的解决方案使系统很慢。有没有办法只使用一个查询?

假设你创建的列存储是一个DATETIME或TIMESTAMP,并且数据更精细的超过一天:

SELECT COUNT(*)... GROUP BY YEAR(创建),MONTH(创建), DAY(已创建)

COUNT是一个聚合函数,将应用于每个组,即每组将有一行,该行将具有该组中的记录数。由于我们每天都会成为一个团队,这就是您想要的数据。

由于DAY返回一个月中的某一天,因此您不能只按DAY(创建)进行分组,因此我们还需要将月份和年份设置为确保日期是离散的。

您可能希望创建一个WHERE> $ start AND创建< $完成,以将其限制为某个时间范围(或WHERE YEAR(创建)== 2010)。

参考文献:

MySQL Query GROUP BY day/month/year

http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html

您可以使用group by子句。 http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html

,如果你有在你的日期时间,你就必须对其进行格式化,仅保留日期(http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

select count(*), created from my_table group by created 

如果它是一个datetime列不已:

SELECT COUNT(*),DATE(created) as d ..... GROUP BY d; 

如果它是存储为unix时间戳:

SELECT COUNT(*),DATE(FROM_UNIXTIME(created)) as d ..... GROUP BY d; 

基本上,您可以使用Mysql Date and Time functions可以对列进行格式设置,以便只显示日期,然后按这些日期进行分组以获得每个日期的计数。