【问题标题】:MYSQL query for every hourMYSQL 每小时查询一次
【发布时间】:2013-04-30 03:59:37
【问题描述】:
$today = mktime(0,0,0);
$yesterday = $today - 86400;
$this->view->numberyesterday=$db->fetchAll("SELECT * FROM `transactions` WHERE `siteid`=".$sid." AND `timestamp` > ".$db->quote($yesterday,'integer')." AND timestamp < ".$db->quote($today,'integer'));

我已经使用上面的代码显示了昨天的所有记录。现在我需要为每个小时绘制图表。如何从上述查询中检索每小时的记录?(例如,12-1 AM、1-2 AM....23-24PM 等内的记录)

谢谢!

编辑:

我希望我可以将每个小时的记录存储在每个变量中。这样24小时就有24个变量。所以很容易画图。

【问题讨论】:

    标签: php mysql sql datetime aggregate-functions


    【解决方案1】:

    您没有指定输出的外观,但该结构似乎对您有所帮助:

    select Hour(timestamp) transhour, count(*) transcount
    from transactions
    where yourfilters = yourvalues
    Group by Hour(timestamp)
    

    输出将如下所示:

    transhour | transcount
    ======================
    0         | 2
    1         | 23
    2         | 45
    3         | 23
    ...       | ...
    22        | 34
    23        | 3
    

    警告:如果在给定小时内没有执行任何事务,则输出将在这一小时省略(并且不会以计数为零的方式将其返回)

    【讨论】:

    • 感谢您的回答。我希望我可以将每个小时的记录存储在每个变量中。这样24小时就有24个变量。所以很容易绘制图形。所以查询应该类似于 $this->view->numberyesterday=$db->fetchAll("SELECT * FROM transactions WHERE siteid=".$sid." AND timestamp > ".$db ->quote($yesterday,'integer')." AND timestamp quote($today,'integer') AND hour BETWEEN (1,2));
    • 没有记录时如何使值为零?