GROUP BY chat_id - 仅在匹配所有条件的行时返回

时间:2017-04-20 14:06:18

标签: mysql sql database

我有一个聊天参与者的表格,如下所示:

id         chat_id          participant_id
1          1                5
2          1                7
3          1                9

如果用户创建了新聊天,我们首先要确保与所请求的参与者的聊天不存在,如果是,我们将只使用该聊天。

所以这里我要说我想与参与者57911建立聊天。

在这种情况下,不会返回任何内容,并且必须创建与新chat_id的新聊天,因为没有包含所有这些成员的聊天。

但是,如果我们想要仅与参与者579建立聊天,则应返回chat_id的{​​{1}}。

是否有一种有效的方法来构建查询以实现此目的而不使用循环?

我试过这样的事情,但从未得到理想的结果:

1

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您只需添加条件,其中包含您所请求的参与者总数,例如

SELECT chat_id FROM chat_participants WHERE participant IN(5,7,9) GROUP 
BY chat_id having count(chat_id) = 3

如果您通过IN(5,7,9,11)而不是您的条件having count(chat_id) = 4

答案 1 :(得分:2)

select chat_id
from
(
select chat_id, group_concat(participant order by participant, ',') as gc
from chat_participants
where chat id in (select chat_id from chat_participants where participant IN(5,7,9))
group by chat_id 
) x1
where x1.gc = '5,7,9'