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

phpMyAdmin中posts_comments表重复通知问题求助:实现单用户单通知

解决重复发送通知的问题

我来帮你搞定这个重复发送通知的问题!核心问题在于你当前的逻辑是遍历每一条评论记录,只要有一条评论就插一条通知——但如果同一个用户有多条评论,自然会收到多条重复通知。咱们只需要先拿到所有评论用户的唯一ID,再给每个ID发一次通知就好。

问题分析

你的原SQL查询SELECT * FROM posts_comments WHERE id=?会返回所有匹配的评论行,假设用户A在这条帖子下留了3条评论,循环就会执行3次插入操作,导致用户A收到3条一模一样的通知。

解决方案

我们可以修改SQL查询,用DISTINCT关键字直接获取唯一的user_id,这样就能避免重复处理同一个用户:

// 第一步:获取所有评论过的唯一用户ID
$sql = "SELECT DISTINCT user_id FROM posts_comments WHERE id=?"; 
$stmt = $this->connect()->prepare($sql); 
// 修正原代码的语法错误:补全闭合括号
$stmt->execute([$_GET['id']]); 
// 只提取user_id列,不需要所有字段,提升效率
$userIds = $stmt->fetchAll(PDO::FETCH_COLUMN, 0); 

// 第二步:给每个唯一用户发送一次通知
$message = '有人评论了你关注的帖子';
$insertSql = "INSERT INTO notifications(message, user_id) VALUES(?, ?)"; 
$insertStmt = $this->connect()->prepare($insertSql); 

foreach($userIds as $userId){ 
    // 修正原代码的execute参数错误:PDO需要传入数组格式的参数
    $insertStmt->execute([$message, $userId]); 
}

额外优化建议

如果你的业务需要避免重复发送相同内容类型的通知(比如用户已经收到过这条帖子的评论通知),还可以在插入前加一层判断:查询notifications表中是否已经存在该用户+该帖子相关的通知记录,不存在再插入,进一步避免冗余通知。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:17:56