2017-06-05 158 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'可能是最快的方法。如果你在“响应”上设置了适当的索引,左连接可能几乎一样快。真的,只需选择你觉得更舒适的版本。 –