2017-06-05 162 views
0

我有一個顯示帖子的網站,用戶可以對它投票。他們投票後,我不希望它再次顯示給該用戶。所以我需要有一個查詢輪詢所有帖子並返回用戶尚未回覆的帖子。選擇用戶沒有回覆的所有帖子?

我在想這將是最簡單的有一個帖子表,響應表和用戶表。響應表可以包括postId和userId。這可以讓我看到用戶迴應的所有帖子,但我無法弄清楚如何翻轉它以顯示否定。而且這樣做似乎很慢。

回答

1

找出具有尚未由給定用戶所看到的所有帖子,你可以嘗試以下查詢:

SELECT p.* 
FROM posts p 
WHERE NOT EXISTS (SELECT 1 FROM responses r 
        WHERE r.postId = p.postId AND r.userId = <some value>) 

作爲替代使用NOT EXISTS,你也可以短語此使用LEFT JOIN

SELECT p.* 
FROM posts p 
LEFT JOIN responses r 
    ON p.postId = r.postId AND 
     r.userId = <some value> 
WHERE r.postId IS NULL 
+0

這似乎工作得很好,不能說我會拿出那個,謝謝! 編輯:兩種版本都可以嗎?我認爲左連接有一點速度優勢 – DasBeasto

+0

@DasBeasto實際上,'NOT EXISTS'可能是最快的方法。如果你在「響應」上設置了適當的索引,左連接可能幾乎一樣快。真的,只需選擇你覺得更舒適的版本。 –