1

一部の投稿を除外する SQL クエリ (私は postgres を実行しています) を作成しようとしています。

たとえば、ユーザー モデル (id、名前など...)、ブラックリスト モデル (id、user_id、blacklisted_user_id を含む)、投稿モデル (id、author_id、タイトルなど) を見つけたとしましょう。

ユーザー A(id=5) がユーザー B(id=10) をブロックするとします。

ユーザー A も B も自分の投稿を見るべきではありません。私はsthに見えるクエリを試しています。このような:

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と、空の応答が返されます。

4

1 に答える 1

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

それはあなたが望んでいたようなものですか?

于 2013-02-07T12:05:41.443 に答える