我有一个聊天参与者表,如下所示:
id chat_id participant_id
1 1 5
2 1 7
3 1 9如果用户创建了新的聊天,我们首先要确保与请求的参与者的聊天还不存在,如果存在,我们将只使用该聊天。
因此,假设我想要创建与参与者5、7、9和11的聊天。
在这种情况下,将不会返回任何内容,并且必须创建具有新chat_id的新聊天,因为没有包含所有这些成员的聊天。
但是,如果我们只想创建一个参与者为5、7和9的聊天,则应该返回1的chat_id。
有没有一种有效的方法可以在不使用循环的情况下构造查询来实现这一点?
我尝试了这样的方法,但从未得到预期的结果:
SELECT chat_id FROM chat_participants WHERE participant IN(5,7,9) GROUP BY chat_id有什么建议吗?
发布于 2017-04-20 22:09:57
您只需添加条件,并按如下方式添加您请求的参与者总数
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
发布于 2017-04-20 22:15:32
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'https://stackoverflow.com/questions/43521865
复制相似问题