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

如何用PHP结合SQL COUNT函数统计近24小时用户发帖次数(限60条)

问题修正:统计近24小时用户发帖次数

需求说明

  • 从super_table表中筛选近24小时内的数据
  • 统计每位用户的发帖次数
  • 最多返回60条结果

表结构示例

id username date_post
---------------------
11  james   111105487
10  luke    110105474
9   james   110105400
8   john    111105486
7   james   111100487
6   luke    110105174
5   john    110205474

期望输出格式

james(3)
luke(2)
john(2)    

现有代码问题分析

  1. 时间逻辑错误:
    原代码用strtotime("+1 day")取明天的时间,条件写date_post < '$delay_search',这会筛选所有早于明天的数据,完全不符合“近24小时”的要求。正确应该是取当前时间往前推24小时,用strtotime("-1 day"),条件改为date_post > ?(表示发帖时间在近24小时内)。
  2. 排序逻辑错误:
    原代码按id DESC排序,这是按帖子ID倒序,不是按用户发帖次数排序。应该按统计出的发帖次数从多到少排序,即ORDER BY count DESC。
  3. 输出格式不符:
    原代码输出带User :前缀,且没有换行,和期望的格式不一致。需要直接输出用户名(次数),每条结果后换行。
  4. SQL注入风险:
    直接将变量拼入SQL语句,存在安全隐患,应该使用预处理语句绑定参数。

修正后的代码

<?php
// 获取当前时间往前推24小时的时间戳
$delay_search = strtotime("-1 day");
$max_user_get = 60;

// 使用预处理语句避免SQL注入,同时修正时间条件和排序逻辑
$sql_total = "
SELECT username, COUNT(*) as count 
FROM super_table 
WHERE date_post > ? 
GROUP BY username 
ORDER BY count DESC 
LIMIT ?;
";

// 初始化预处理语句
$stmt = $conn->prepare($sql_total);
// 绑定参数,i表示整数类型
$stmt->bind_param("ii", $delay_search, $max_user_get);
// 执行查询
$stmt->execute();
// 获取结果集
$result_total = $stmt->get_result();

$temp = '';
while ($row = $result_total->fetch_assoc()) {
    $username = $row["username"];
    $total_post = $row['count'];  
    // 按期望格式拼接,每条结果后添加换行符
    $temp .= $username . '(' . $total_post . ')' . "\n";
}   

echo $temp;
// 关闭语句和连接(可选,根据上下文处理)
$stmt->close();
// $conn->close();
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:55:23