我有一个聊天参与者的表格,如下所示:
id chat_id participant_id
1 1 5
2 1 7
3 1 9
如果用户创建了新聊天,我们首先要确保与所请求的参与者的聊天不存在,如果是,我们将只使用该聊天。
所以这里我要说我想与参与者5
,7
,9
和11
建立聊天。
在这种情况下,不会返回任何内容,并且必须创建与新chat_id
的新聊天,因为没有包含所有这些成员的聊天。
但是,如果我们想要仅与参与者5
,7
和9
建立聊天,则应返回chat_id
的{{1}}。
是否有一种有效的方法来构建查询以实现此目的而不使用循环?
我试过这样的事情,但从未得到理想的结果:
1
有什么建议吗?
答案 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'