统计用户每个日期的所有访问量

问题描述 投票:0回答:1

我想创建用户每个日期的所有访问次数的统计。目前,我正在努力寻找在哪里插入用于计算每个日期的计数的代码。以下是我当前的 php 代码:

$lastvis = '';
$lastui = '';
$count = array();
$i = 0;
    
$tvQuery = "SELECT * FROM visits ORDER BY lastvisit ASC";
$tvQ = $conn->prepare($tvQuery);
$tvQ->execute();
$tvQres = $tvQ->get_result();
while ($row = $tvQres->fetch_assoc()) {
    if($row['lastvisit'] == $lastvis) {
        $count[$i]=+1;
    } else {
        $lastvis = $row['lastvisit'];
        echo $i.'<br>';
        $count[$i]=+1;
        echo $count[$i].'<br>';
        $i++;
        echo $lastvis.'<br>';
    }
}

我正在回显输出以验证值是否正确。这也是日期表:visits table

到目前为止,我可以使用上面的代码从表中分离出唯一的日期。我正在尝试在

count
数组中输入每个日期的唯一用户数。如果您问我为什么要编写这段代码,我正计划将这些数据传输到图表中。

php
1个回答
0
投票

我没有看到您在代码中的任何地方处理 UID。您只是计算唯一日期,而不是每个日期的唯一用户。无论如何,您应该让查询为您处理它,而不是浪费时间循环遍历值。

而不是查询:

$tvQuery = "SELECT * FROM visits ORDER BY lastvisit ASC";

尝试:

$tvQuery = "SELECT DISTINCT lastvisit, COUNT(lastvisit) AS numvisits FROM visits GROUP BY lastvisit ASC";

这将返回字段

lastvisit
中的唯一日期列表,其中第二个字段
numvisits
包含该日期在表中出现的次数。

但是,正如我怀疑的那样,如果您想要的是每个日期的唯一用户列表,并假设带有用户 ID 的字段是

uid
,那么查询应该如下所示:

$tvQuery = "SELECT DISTINCT lastvisit, uid, COUNT(lastvisit) AS numvisits FROM visits GROUP BY lastvisit, uid ASC";

您在这里告诉查询的是:

  • 对表格进行排序,首先按日期 (
    lastvisit
    ),然后按用户 (
    uid
    )
  • 将相同的行分组(具有相同的日期和用户)
  • 计算分组行数
  • 消除重复行

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.