Как я должен фильтровать заблокированное пользовательское содержимое? - PullRequest
0 голосов
/ 11 февраля 2019

Я создал небольшой социальный сайт, на котором есть пользовательский контент.И пользователи имеют возможность блокировать друг друга, если им не нравится то, что они публикуют.

Так что я использую postgresql и у меня есть три простые таблицы.

Table User
id (pk)  | user_name
1        | a
2        | b
3        | c

Table Post
id (pk)  | user_id (fk) | content
1        | 1            | s
2        | 3            | a
3        | 2            | m
4        | 2            | p

Table Block
id (pk) | blocker_id (fk)  | blocked_id (fk)
1       | 1                | 2

Что я ожидаю, когдаЯ нажимаю кнопку поиска:

  • user1 должен видеть свои собственные сообщения и сообщения user3, потому что user2 заблокирован.
  • user2 должен видеть свои собственные сообщения и сообщения user3, потому что он был заблокирован user1.
  • user3 должен видеть свои собственные сообщения, сообщения user2 и user1.

Sql

Я написал sql, но не смог написать эластичный поисковый запрос.Вот SQL-оператор:

select *
from Post p
where
not exists (select id
from Block
where ((Block.blocked_id = p.user_id) and (Block.blocker_id = @current_user_id)) or ((Block.blocked_id = @current_user_id) and (Block.blocker_id = p.user_id))

Что мне делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...