繁体   English   中英

如何在php / mysql中对时间间隔进行分组并根据这些时间组获取统计信息?

[英]How to group time intervals in php/mysql and get statistics based on those time groups?

我是php的新手,我对时间/日期的操作有疑问。

我需要统计一些商店中每天/每月/每年的访问量。 有一个带有表“ statistics”和fields: "statistic_id" ( integer, primary key ) , "visitors" ( integer ), and "dateAndTime" ( timestamp )的mysql数据库fields: "statistic_id" ( integer, primary key ) , "visitors" ( integer ), and "dateAndTime" ( timestamp ) 我有一个表单,用户输入进入商店的访客数,并使用now()函数将该数字以及时间和日期插入数据库中。

所以基本上我的数据库看起来像:

statistic_id , visitors , timeAndDate <br />
1............, 3........., 2012-09-29 14:45:02 <br />
2............, 5........., 2012-09-29 14:46:31 <br />
3............, 2........., 2012-09-29 18:48:11 ...etc.

我需要做的是总结并显示特定时间间隔内的所有访客。 09h-12h ; 12h-15h ; 15h-18h ; 18h-21h 09h-12h ; 12h-15h ; 15h-18h ; 18h-21h 因此,我需要在表中显示所有这些间隔以及每个访问者的访问人数。 问题是我不知道如何提取这些间隔,然后获取它们的访客总数。 我一直在尝试我所能找到的一切,但是没有成功。 另外,我将必须获取每月和每年的统计信息,因此如何从timeAndDate列中获取全部12 months信息,然后sum all visitors for each month

是否有人知道如何执行此操作,并愿意详细解释给我? 谢谢

在09:00至12:00之间吸引访客

SELECT
    SUM(`visitors`)

FROM
    `my_table`

WHERE
    HOUR(`timeAndDate`) BETWEEN 9 AND 12

按月吸引访客

SELECT
    MONTH(`timeAndDate`),
    SUM(`visitors`)

FROM
    `my_table`

GROUP BY
    MONTH(`timeAndDate`)

按年份吸引访客

SELECT
    YEAR(`timeAndDate`),
    SUM(`visitors`)

FROM
    `my_table`

GROUP BY
    YEAR(`timeAndDate`)

一个简单的PHP示例,可在表中输出月份

<?php

    // Connect to database
    $db = mysqli_connect('localhost', 'root', 'root', 'test') or die('Could not connect to database');

    // Prepare sql question
    $sql = "SELECT
                MONTHNAME(`timeAndDate`) AS `month`,
                SUM(`visitors`) AS `visitors`

            FROM
                `test`

            GROUP BY
                MONTH(`timeAndDate`)";

    // Query the database
    $result = mysqli_query($db, $sql);

    // Begin table
    print '<table><thead><tr><th>Month</th><th>Visitors</th></tr></thead><tbody>';

    // Loop result
    while($row = mysqli_fetch_assoc($result)) {
        print "<tr><td>{$row['month']}</td><td>{$row['visitors']}</td></tr>";
    }

    // End table
    print '</tbody></table>';

?>

9和12之间的DATE_FORMAT(timeAndDate,'%k')

DATE_FORMAT: http//www.w3schools.com/sql/func_date_format.asp

SELECT DATE(timeAndDate), SUM(visitors) FROM Table
WHERE 
DATE_FORMAT(timeAndDate,'%k') BETWEEN 9 AND 12
AND YEAR(timeAndDate) = 2012
GROUP BY MONTH(timeAndDate)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM