Mysql查找的行等于某些值,但受到count的限制

时间:2017-12-01 03:05:20

标签: mysql sql

我有一个会话应用,用户被分配到对话。 一个对话可以有1,2或更多参与者,我使用表格将用户链接到对话:

enter image description here

当用户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`

enter image description here

但是

  • 这也会返回会话ID 2,而我想要 只有id 1,所以我想将select查询限制为元素 计数为2,如果我在失去能力之前完成了这个小组 匹配用户。
  • 这也返回id 7,因为它匹配2个user_ids中的1个 它应该匹配

最后,我只想检索ID 1,因为这是对话包括用户5和6以及没有其他人。这只能用于Mysql查询吗?

2 个答案:

答案 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;我相信。所以我建议你使用一个案例表达式,我认为它也更容易阅读/理解。