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
相关产品推荐
相关产品推荐

