我有一个会话应用,用户被分配到对话。 一个对话可以有1,2或更多参与者,我使用表格将用户链接到对话:
当用户5想要与用户6发起新会话时,我不想创建新会话,因为用户5和6已经有正在进行的conversation_id。
他们实际上也与用户10进行了不同的群组对话
我有两个参数:用户5 想与用户6 交谈 如何查询此表格以查找对话是否仅存在于这两个用户之间 ?
我试过了:
SELECT *,count(id) FROM `conversation_members`
WHERE user_id IN (5,6)
GROUP BY `conversation_id`
但是
最后,我只想检索ID 1,因为这是对话包括用户5和6以及没有其他人。这只能用于Mysql查询吗?
答案 0 :(得分:2)
你可以这样做:
SELECT conversation_id
FROM conversation_members
GROUP BY conversation_id
HAVING SUM(user_id IN (5, 6)) = 2 AND
COUNT(*) = 2;
这将返回所有具有这些成员的会话(如果有的话)。
答案 1 :(得分:0)
使用案例表达式的总和以及having子句中的计数:
SELECT conversation_id
FROM conversation_members
GROUP BY conversation_id
HAVING SUM(case when user_id IN (5, 6) then 1 end) = 2
AND COUNT(*) = 2;
使用此HAVING SUM(user_id IN (5, 6)) = 2
的能力并不常见,并且是“好奇心”和#34;我相信。所以我建议你使用一个案例表达式,我认为它也更容易阅读/理解。