You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何修改PHP代码实现按日期统计唯一用户访问量

按日期统计每日唯一用户访问量解决方案

推荐方案:用SQL直接聚合统计(高效准确)

直接通过数据库聚合函数完成统计,比PHP循环处理更高效,还能避免逻辑错误。假设用户ID字段为user_id,执行以下代码:

$tvQuery = "SELECT lastvisit, COUNT(DISTINCT user_id) AS unique_users FROM visits GROUP BY lastvisit ORDER BY lastvisit ASC";
$tvQ = $conn->prepare($tvQuery);
$tvQ->execute();
$tvQres = $tvQ->get_result();

// 用日期作为数组键,方便后续生成图表
$dailyUniqueUsers = [];
while ($row = $tvQres->fetch_assoc()) {
    $dailyUniqueUsers[$row['lastvisit']] = $row['unique_users'];
}

// 验证输出
foreach ($dailyUniqueUsers as $date => $userCount) {
    echo "日期:{$date},唯一用户数:{$userCount}<br>";
}

修改现有PHP代码实现

如果要基于你原有的代码逻辑调整,需要新增数组记录当日已统计的用户ID,避免重复计数:

$lastvis = '';
$dailyTrackedUsers = []; // 存储当日已统计的用户ID
$count = [];
$i = 0;

$tvQuery = "SELECT * FROM visits ORDER BY lastvisit ASC, user_id ASC";
$tvQ = $conn->prepare($tvQuery);
$tvQ->execute();
$tvQres = $tvQ->get_result();

while ($row = $tvQres->fetch_assoc()) {
    if ($row['lastvisit'] == $lastvis) {
        // 仅当用户未被统计过,才增加计数
        if (!in_array($row['user_id'], $dailyTrackedUsers)) {
            $count[$i]++;
            $dailyTrackedUsers[] = $row['user_id'];
        }
    } else {
        // 切换日期时重置用户列表,初始化新日期的计数
        $lastvis = $row['lastvisit'];
        $dailyTrackedUsers = [$row['user_id']];
        $count[$i] = 1;
        $i++;
    }
}

// 验证输出
foreach ($count as $index => $userCount) {
    echo "索引{$index},唯一用户数:{$userCount}<br>";
}

说明

  • 原代码的问题是仅统计了日期出现的行数,没有对用户去重,会导致同一用户当日多次访问被重复计数。
  • 推荐用SQL方案,数据量大时性能优势明显,且逻辑更简洁。

内容的提问来源于stack exchange,提问作者KleiaTMT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 00:42:41