Я создал небольшой социальный сайт, на котором есть пользовательский контент.И пользователи имеют возможность блокировать друг друга, если им не нравится то, что они публикуют.
Так что я использую 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))
Что мне делать?