MYSQL计算小时表中数据库表中的访问者数量,格式为1:00到23:00

时间:2018-05-06 07:30:20

标签: php mysql mysqli

我有一个这样的访问者数据库表,其名称为"访客"带字段的表" id"和"约会"。

+----+-------------------------------+
| id |date                           |
+----+-------------------------------+
| 1  |2018-01-01 00:12:09            |
| 2  |2018-01-01 01:00:00            |
| 3  |2018-01-01 02:00:00            |
| 4  |2018-01-01 02:15:00            |
| 5  |2018-01-01 03:20:01            |
| 6  |2018-01-01 04:00:00            |
+----+-------------------------------+

并希望我想要以表格的形式显示此时钟分组00-01 => 01 .... 23

visitors on this day 2018-01-01
+---------------------------------------+
| hour  | visitor                       |
+-------+-------------------------------+
| 01:00 |2 visitor                      |
+-------+-------------------------------+ 
| 02:00 |2 visitor                      |
+-------+-------------------------------+
| 03:00 |1 visitor                      |
+-------+-------------------------------+ 
| 04:00 |1 visitor                      |
+-------+-------------------------------+ 
| 05:00 |0 visitor                      |
+-------+-------------------------------+ 
| 06:00 |0 visitor                      |
+-------+-------------------------------+
| etc ...                               |
+-------+-------------------------------+ 
| 23:00 |0 visitor                      |
+-------+-------------------------------+  

有人能解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

希望它会对你有所帮助:

$query = "SELECT DATE_FORMAT(`date`, '%H:00') AS `HOUR`, COUNT(`id`) AS `VISITOR` 
    FROM `visitor` 
    WHERE DATE_FORMAT(`date`, '%Y-%m-%d') = '2018-01-01' 
    GROUP BY DATE_FORMAT(`date`, '%H:00')";

$res = mysqli_query($conn, $query);
$list = [];
while($row = mysqli_fetch_assoc($res)){
    $list[] = ["HOUR" => $row["HOUR"], "VISITOR" => $row["VISITOR"]];
}

echo "<table><thead><tr><th>HOUR</th><th>VISITOR</th></tr></thead><tbody>";

for($i=1;$i<24;$i++){
    foreach($list as $key=>$arr){
        $h_arr = explode(":", $arr["HOUR"]);
        if(sprintf('%02d', $h_arr[0]) == sprintf('%02d', $i)){
            $visitor = $arr["VISITOR"];
            break;
        }else{
            $visitor = 0;
        }
    }
    echo "<tr><td>".sprintf('%02d', $i)."</td><td>".$visitor."</td></tr>";
}

echo "</tbody></table>";