0
我有一個顯示帖子的網站,用戶可以對它投票。他們投票後,我不希望它再次顯示給該用戶。所以我需要有一個查詢輪詢所有帖子並返回用戶尚未回覆的帖子。選擇用戶沒有回覆的所有帖子?
我在想這將是最簡單的有一個帖子表,響應表和用戶表。響應表可以包括postId和userId。這可以讓我看到用戶有迴應的所有帖子,但我無法弄清楚如何翻轉它以顯示否定。而且這樣做似乎很慢。
我有一個顯示帖子的網站,用戶可以對它投票。他們投票後,我不希望它再次顯示給該用戶。所以我需要有一個查詢輪詢所有帖子並返回用戶尚未回覆的帖子。選擇用戶沒有回覆的所有帖子?
我在想這將是最簡單的有一個帖子表,響應表和用戶表。響應表可以包括postId和userId。這可以讓我看到用戶有迴應的所有帖子,但我無法弄清楚如何翻轉它以顯示否定。而且這樣做似乎很慢。
找出具有不尚未由給定用戶所看到的所有帖子,你可以嘗試以下查詢:
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
這似乎工作得很好,不能說我會拿出那個,謝謝! 編輯:兩種版本都可以嗎?我認爲左連接有一點速度優勢 – DasBeasto
@DasBeasto實際上,'NOT EXISTS'可能是最快的方法。如果你在「響應」上設置了適當的索引,左連接可能幾乎一樣快。真的,只需選擇你覺得更舒適的版本。 –