我认为这将是一个简单的查询,但它比我预期的要难。
我有一个简单的论坛应用程序,用户可以在其中打开一个故事,然后其他用户可以发表评论。
两个表是
故事
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'标志的情况下工作正常,但是当我将'approved'添加到where/having子句时我无法让它工作。
我做错了什么?
最佳答案
我会将 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)
关于mysql - 跳过计算用户自己的评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26646261/