如何在一年内每天只使用一个查询来获取数据?
我希望每天起床一年内落后的数据,但我必须使用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可以对列进行格式设置,以便只显示日期,然后按这些日期进行分组以获得每个日期的计数。