我有一个表来管理用户之间聊天的对话,结构如下。
id | user_id | conversation_id
让我们说在与ID 1的对话中,有3个人可以聊天,还有2个人的对话,以及2个人
Conversations_users表将如下所示
id | user_id | conversation_id
1 1 1
2 2 1
3 4 1
4 3 2
5 4 2
现在只拥有用户3
和4
以及非对话ID 的ID我想选择属于该用户的对话,因此口头查询应该是:
Select from conversations_users, where in user_id = 3 and 4 and conversation_id is equals to conversation id of user 3 and 4
我如何构建这个"口头查询"在Mysql中?
答案 0 :(得分:1)
这是一种方法:
select uc.conversation_id
from UserConversions uc
where uc.user_id in (3, 4)
group by uc.conversation_id
having count(*) = 2;
如果表格可能有重复项,则您需要:having count(distinct user_id) = 2
。
编辑:
如果您需要特定列表,只需将where
条件移至having
子句:
select cu.conversation_id
from conversations_users cu
group by cu.conversation_id
having sum(cu.user_id in (3, 4)) = 2 and
sum(cu.user_id not in (3, 4)) = 0;
答案 1 :(得分:1)
让用户3和4所属的会话中的所有用户都可以使用此功能:
select distinct(user_id) from conversation_table where conversation_id in (select distinct(conversation_id) from conversation_table where user_id in (3,4));
虽然不会很快
要获得他们的实际对话,我假设你有一个不同的表格中包含文字:
你可能想要这样的东西select distinct(u.user_id), c.text from conversation_table u left join conversations c on c.id=u.conversation_id where u.conversation_id in (select distinct(conversation_id) from conversation_table where user_id in (3,4));
这是一个sqlfiddle
答案 2 :(得分:0)
我假设您有另一个名为“对话”的表,其中包含您真正想要的数据。
SELECT *
FROM conversations, conversations_users
WHERE conversations_users.user_id in (3,4)
AND conversations.id = conversations_users.conversation_id