を含むデータベースがありますusers
conversations
conversation_user
。
ここで、2 人のユーザーが会話しているかどうかを確認したいと考えています。どうすればこれをスマートに行うことができますか?
この場合、user1
とuser2
は会話をしています。
conversation_id
これにより、ユーザー 1 とユーザー 2 の共通点がすべてリストされます。
SELECT conversation_id
FROM conversations
WHERE user_id IN (1, 2)
GROUP BY conversation_id
HAVING COUNT(DISTINCT user_id)=2
ここでフィドルを参照してください。
select count('x')
from
conversation_user x
where
(x.userid1 = 1 and x.userid2 = 2) or
(x.userid1 = 2 and x.userid2 = 1)
このクエリが を返す場合0
、彼らは会話をしていません。そうでなければそうです。
自己結合はそれを行うことができます:
SELECT c.conversation_id
FROM conversations c
JOIN conversations c2
ON c.conversation_id=c2.conversation_id
WHERE c.user_id=<x> AND c2.user_id=<y>