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

时间:2010-03-08 10:06:57

标签: php mysql

我想在一年内每天获取数据,但我必须每天使用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
}

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

3 个答案:

答案 0 :(得分:4)

假设您创建的列是DATETIME或TIMESTAMP,并且存储的数据比一天更精细:

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

COUNT是一个聚合函数,将应用于每个组,即每个组将有一行,该行将具有该组中的记录数。由于我们每天创建一个小组,这就是您想要的数据。

您不能只按DAY(已创建)进行分组,因为DAY会返回当月的日期,因此我们还需要将月份和年份放入以确保日期是离散的。

您可能希望创建一个WHERE&gt; $ start AND created&lt; $ finish将其限制为某个时间范围(或WHERE YEAR(已创建)== 2010)。

参考文献:

MySQL Query GROUP BY day / month / year

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

答案 1 :(得分:3)

您可以使用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

答案 2 :(得分:1)

如果它已经是日期时间列:

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格式化列,以便只获取其中的日期,然后按这些日期分组以获取每个日期的计数。