【问题标题】:How to use only one query to get the data every day within one year?一年内每天如何只使用一次查询获取数据?
【发布时间】:2011-01-24 22:08:42
【问题描述】:

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

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

【问题讨论】:

    标签: php mysql


    【解决方案1】:

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

    SELECT COUNT(*) ... GROUP BY YEAR(created), MONTH(created), DAY(created)

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

    您不能只按 DAY(created) 分组,因为 DAY 返回月份中的某天,因此我们还需要输入月份和年份以确保日期是离散的。

    您可能希望创建 WHERE > $start AND created

    参考资料:

    MySQL Query GROUP BY day / month / year

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-19
          • 1970-01-01
          • 2021-12-22
          • 2020-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多