[英]SQL select many to many relationship
我有以下架构:
Users
-----
id
name
Conversations
-------------
id
other
Partecipants (join table)
------------
id
user_id
conversation_id
other
一个用户可以有很多对话,并且一个对话属于许多用户。
我需要选择一个用户与其他用户的子集的所有对话。
我的尝试是(不起作用):
SELECT *
FROM `conversations`
INNER JOIN `participants` ON `conversations`.`id` = `participants`.`conversation_id`
WHERE `participants`.`user_id` = 1
AND (participants.user_id IN (4,6))
GROUP BY participants.conversation_id
任何想法?
嗯。 这是使用group by
并having
:
select p.conversation_id
from participants p
group by p.conversation_id
having sum(p.user_id = 1) > 0 and -- user 1 in conversation
sum(p.user_id in (4, 6)) > 0; -- user 4 and/or 6 in conversation
从您的问题中我了解到的是,您希望看到与user_id = 1对话的用户“ 4,6”。为此,请尝试执行以下查询。
select * from (SELECT conversations.id as conversation_id, participants.user_id as selectedUser, GROUP_CONCAT(participants.user_id) AS participants
FROM `conversations`
INNER JOIN `participants` ON `conversations`.`id` = `participants`.`conversation_id`
GROUP BY participants.conversation_id ) as derivedTable
where
selectedUser=1 and
(participants like '%4%' and participants like '%6%')
以上查询的作用是。 最初,它将从对话和参与者表中获取所有记录,并再次将所有参与者连接到user_id = 1。 然后外部查询检查很清楚地找到了user_id,参与者有4和6。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.