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