5

我是 php 新手,但时间/日期操作有问题。

我需要统计一些商店的每日/每月/每年访问量。有一个带有“统计”表的 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. 所以我需要在表格中显示所有这些间隔和每个访问者的数量。问题是我不知道如何提取这些间隔,然后为他们获取访问者的总和。我正在尝试我所知道的一切,我能找到,但没有成功。此外,我还必须获取月度和年度统计数据,那么我如何才能12 months从该timeAndDate列中获取所有数据sum all visitors for each month呢?

有谁知道如何做到这一点,并愿意详细解释我吗?谢谢

4

3 回答 3

5

在 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>';

?>
于 2012-10-02T14:06:14.230 回答
0

WHERE DATE_FORMAT(timeAndDate,'%k') 介于 9 和 12 之间

日期格式:http : //www.w3schools.com/sql/func_date_format.asp

于 2012-10-02T14:04:25.000 回答
0
SELECT DATE(timeAndDate), SUM(visitors) FROM Table
WHERE 
DATE_FORMAT(timeAndDate,'%k') BETWEEN 9 AND 12
AND YEAR(timeAndDate) = 2012
GROUP BY MONTH(timeAndDate)
于 2012-10-02T14:08:02.533 回答