我正在尝试构建SQL查询(我正在运行postgres),这会过滤掉一些帖子:
让我们说,我有用户模型(id,名称等等),黑名单模型(带id,user_id,blacklisted_user_id)nad Post模型(id,author_id,title等)
想象一下,用户A(id = 5)阻止用户B(id = 10)。
用户A和B都不应该看到他们的帖子。 我正在尝试查询看起来......像这样:
SELECT posts.* FROM "posts"
LEFT JOIN blacklists b ON (b.user_id = posts.author_id OR
b.blacklisted_user_id = posts.author_id)
WHERE (b.user_id = 5 AND b.blacklisted_user_id = posts.author_id) OR
(b.user_id = posts.author_id AND b.blacklisted_user_id = 5)
然而,结果与我需要的完全相反:我只收到黑名单用户的帖子。
当我使用b.user_id != 5
时,我的回复是空的。
答案 0 :(得分:1)
你正在重复blacklisted_user_id = posts.author_id,这是不必要的。
然后,您可能想要与黑名单不匹配的帖子。类似的东西:
SELECT posts.* FROM posts
LEFT JOIN blacklists b ON (b.user_id = posts.author_id OR
b.blacklisted_user_id = posts.author_id)
WHERE posts.author_id = 5 AND b.user_id IS NULL
这是你想要的那种吗?