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

统计协议反馈回复数的SQL查询优化需求:排除协议创建者及反馈发布者的回复

解决统计符合条件的协议回复总数问题

看起来你的查询有两个核心问题:一是没有统计总数而是返回所有关联记录,二是遗漏了排除反馈帖子发布者回复的关键条件。我们来一步步修正这个问题:

核心逻辑回顾

我们需要统计的是:

  • 由memberid=1038创建的、状态为published的协议
  • 这些协议下反馈帖子的有效回复数量
  • 需排除两类回复:协议创建者的回复、对应反馈帖子发布者的回复

修正后的SQL查询

SELECT COUNT(protocolFeedbackReply.protocolpostcommentid) AS valid_reply_count
FROM protocolpost AS protocolfeedback
JOIN protocol AS protocols ON protocols.protocolid = protocolfeedback.protocolid
JOIN protocolpostcomment AS protocolFeedbackReply ON protocolfeedback.protocolpostid = protocolFeedbackReply.protocolpostid
-- 提前关联创建者信息,避免重复子查询
JOIN member AS creator ON creator.memberid = 1038
WHERE protocols.createdby = 1038 
  AND protocols.status = "published" 
  AND protocolFeedbackReply.hasfeedbackreplyviewed = 0
  -- 排除协议创建者的回复
  AND protocolFeedbackReply.commentedby != creator.email
  -- 排除当前反馈帖子发布者的回复
  AND protocolFeedbackReply.commentedby != protocolfeedback.createdby;

关键修正点说明

  1. 从返回记录改为统计总数:使用COUNT()函数直接计算符合条件的回复数量,替代原查询返回所有关联数据的逻辑。
  2. 新增排除帖子发布者的条件:添加AND protocolFeedbackReply.commentedby != protocolfeedback.createdby,确保不会统计每个反馈帖子发布者自己的回复,这正是原查询缺失的部分。
  3. 优化子查询为JOIN:将获取创建者邮箱的子查询改为JOIN操作,让查询更高效,也更易维护。
  4. 替换模糊匹配为精确匹配:原查询用LIKE Concat('%', ... ,'%')可能会误匹配包含目标邮箱的字符串,这里需求是排除创建者本人的回复,精确不等匹配更符合业务逻辑(如果你的场景中createdby/commentedby存在多值存储,可以再调整匹配规则)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:52:46