Есть таблица user_chat
id, user_id, chat_id
1, 1, 123
2, 43, 145
3, 2, 15
4, 55, 66
5, 22, 123
6, 77, 2
7, 1, 33
8, 5. 33
Как мы видим у юзера 1 есть чаты 123 и 33
в чате 123 есть юзер 22
В чате 33 есть юзер 5
Как узнать одним запросом или у пользователя 1 есть общий чат например с 5 ?
-Сначала выборка что бы узнать все chat_id для юзера 1
-Потом для каждого чата делать выборку его пользователей
можно как то одним запросом?
1. ninzzo - 19 Июня, 2019 - 18:47:10 - перейти к сообщению
2. Мелкий - 19 Июня, 2019 - 18:52:23 - перейти к сообщению
ninzzo пишет:
у пользователя 1 есть общий чат например с 5 ?
something like...
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- SELECT chat_id FROM chats WHERE user_id IN (1,5) GROUP BY chat_id HAVING count(*) = 2
или
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- (SELECT chat_id FROM chats WHERE user_id = 1)
- intersect
- (SELECT chat_id FROM chats WHERE user_id = 5)
ну или
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- SELECT chat_id FROM chats c1 WHERE user_id = 1 AND EXISTS (SELECT FROM chats c2 WHERE c2.user_id = 5 AND c2.chat_id = c1.chat_id)