2014-10-30 66 views
1

我認爲這將是一個簡單的查詢,但它比我想象的要困難。跳過次數用戶評論

我有一個簡單的論壇應用程序,用戶打開一個故事,然後其他用戶可以發表評論。

兩個表是

故事

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子句。

我在做什麼錯?

回答

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) 
+0

謝謝@Mureinik!這似乎工作。只是一個新手問題......它應該比加入+有慢嗎? – Moon 2014-10-30 06:29:05

+0

@Moon它**不應該是,但如果沒有在你的實際數據集上分析它,這真的很難回答。 – Mureinik 2014-10-30 06:30:19

+0

//謝謝!我將在有限的知識範圍內進行分析。 – Moon 2014-10-30 06:32:13

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 
+0

謝謝@延斯,但它不起作用。我什麼都沒有回來。 – Moon 2014-10-30 06:24:47