按小时分组数据库数据

时间:2015-04-16 08:17:26

标签: php mysql

我有一个MySQL表,用于存储访问我网站的每个用户的数据。我使用UNIX时间戳来指示访问的时间。

我想获得时间x和时间y之间每小时的访问次数。

这是我能想到的:

  1. 使用MySQL分组:
  2. 这种方法的问题在于它没有解决没有访问的时间,我需要x和y之间每小时的数据,而不仅仅是有访问的数据。

    // the timestamp for 03/16/2015
    $x = 1426489200;
    // the timestamp for 04/16/2015
    $y = 1429167600;
    //Getting the nearest hour
    $start = floor($x / 3600) * 3600;
    $end = ceil($y / 3600) * 3600;
    $Db->query("SELECT ROUND(time/3600) AS timekey, COUNT(*) FROM visits WHERE time>='$start' AND time<='$end' GROUP BY timekey");
    
    1. 使用PHP
    2. 这种方法应该可以正常工作,但我担心性能,特别是如果x和y相隔1个月。

      // the timestamp for 03/16/2015
      $x = 1426489200;
      // the timestamp for 04/16/2015
      $y = 1429167600;
      //Getting the nearest hour
      $start = floor($x / 3600) * 3600;
      $end = ceil($y / 3600) * 3600;
      // the number of hours between start and end
      $hourCount = ($end - $start) / 3600;
      for ($i = 0; $i < $hourCount; $i++) {
          $hourStart = $start + $i * 3600;
          $hourEnd = $hourStart + 3599;
          $query = $Db->query("SELECT time FROM visits WHERE time>='$hourStart' AND time<='$hourEnd'");
          $visitCount = $query->num_rows;
      }
      

1 个答案:

答案 0 :(得分:1)

这看起来像你想要完成的任务:

SELECT DAY(time), HOUR(time), * FROM visits
GROUP BY DAY(time), HOUR(time)

使用this链接,我相信您会发现如何解决您的问题! (只是不使用PHP方法,只有一个查询就足够了。)