跳过计算用户自己的评论

时间:2014-10-30 06:16:18

标签: mysql join

我认为这将是一个简单的查询,但它比我预期的更难。

我有一个简单的论坛应用程序,用户可以在其中打开故事,然后其他用户就可以发表评论。

两个表

故事

id
user_id
subject
approved

评论

id
user_id
story_id
approved

基本上,我想通过不计算原始海报自己的评论来查询未答复的故事。即使其他人发布了新评论,但在评论尚未获得批准时也不应将其视为已回答的故事。

select * from stories left join comments on stories.id = comments.story_id
having count(comments.id) = 0 or ( count(comments.id) > 0 and comments.user_id = stories.user_id )

没有“已批准”标志,它可以正常工作,但是当我将'approved'添加到where / having子句中时,我无法使其正常工作。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

尝试这个未经测试的查询:

select * 
from stories 
   left join comments on stories.id = comments.story_id and comments.user_id <> stories.user_id 
having count(comments.id) = 0 

答案 1 :(得分:1)

我会将count移动到子查询中并放入in条件来检查已回答的内容和不回答的内容:

SELECT s.* 
FROM   stories s
WHERE  s.id NOT IN (SELECT   story_id
                    FROM     comments c
                    WHERE    approved = true AND 
                             c.user_id != s.user_id 
                    GROUP BY story_id
                    HAVING   COUNT(*) > 0)
相关问题