【问题标题】:How to group time intervals in php/mysql and get statistics based on those time groups?如何在 php/mysql 中对时间间隔进行分组并根据这些时间组获取统计信息?
【发布时间】:2012-09-23 09:17:54
【问题描述】:

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

我需要统计一些商店的每日/每月/每年访问量。 有一个带有“统计”表和fields: "statistic_id" ( integer, primary key ) , "visitors" ( integer ), and "dateAndTime" ( timestamp ) 的mysql 数据库。我有一个表单,用户可以在其中输入到店的访客人数,然后使用 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 。所以我需要在表格中显示所有这些间隔和每个访问者的数量。问题是我不知道如何提取这些间隔,然后为他们获取访问者的总和。我正在尝试我所知道的一切,我能找到,但没有成功。此外,我还必须获取月度和年度统计数据,那么如何从 timeAndDate 列和 sum all visitors for each month 获取所有 12 months

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

【问题讨论】:

    标签: php mysql statistics timestamp


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复,但我该如何显示呢?如何在表格中显示每个时间间隔的访客总数?谢谢
    • 在答案中添加了一个快速示例
    • 非常感谢它正在工作。还有一个问题,我仍然不确定,如何同时显示一天中的所有 4 个时间间隔及其访问者?所以应该是 09h-12h : num.访客; 12h-15h:数字。的访客......所有结果都在一张桌子上
    【解决方案2】:

    WHERE DATE_FORMAT(timeAndDate,'%k') 9 到 12 之间

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

    【讨论】:

      【解决方案3】:
      SELECT DATE(timeAndDate), SUM(visitors) FROM Table
      WHERE 
      DATE_FORMAT(timeAndDate,'%k') BETWEEN 9 AND 12
      AND YEAR(timeAndDate) = 2012
      GROUP BY MONTH(timeAndDate)
      

      【讨论】:

      • 如何获取结果?我正在尝试:while ($row = $result->fetch_array(MYSQLI_ASSOC)) { ...但我收到错误消息:在非对象上调用成员函数 fetch_array()
      • 没有错误,但也没有结果。我正在尝试获取这样的数据: while ($row = $result->fetch_array(MYSQLI_ASSOC)) { $visitors = $row['SUM(visitors)']; $dateAndTime = $row['dateAndTime']; $timestamp = strtotime($dateAndTime); echo " ".htmlentities($visitors, ENT_QUOTES, 'UTF-8')." ".date('H:i, dm-Y', $timestamp)." ";这里有什么问题?
      • 1.在你给它值之后尝试 var_dump($row)。 2.也许查询没有返回任何东西(如果你有这样的或类似的,请在 phpmyadmin 中尝试)
      猜你喜欢
      • 2022-01-17
      • 2015-03-07
      • 2017-11-24
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多