我正在写聊天应用程序,支持小组聊天。创建组聊天时,请指定收件人并单击“创建”,这将为收件人创建组聊天。当用户选择已存在于现有组聊天中的所有收件人的收件人时,我希望重定向到它,而不是创建新的收件人,这意味着每个组聊天都有唯一的参与者。我不知道如何确认这种对话是否已经存在。
chat_participants表:
id | user_id | group_chat_id
1 | alice | 1
2 | bob | 1
3 | alice | 2 // chat just with alice
4 | bob | 3 // chat just with bob
当用户试图为用户id "alice“创建新的聊天组时,"bob”我希望获得与这些参与者的现有组聊天的id,其中必须包括所有这些参与者,而在我们的例子中,没有其他人与id 1
进行组聊天。
如何编写这样的sql查询?我使用postgresql,但是任何sql方言都可以。查询应该支持任意数量的用户ids。
发布于 2020-11-18 21:17:54
您可以使用以下方法进行检查:
select cp.group_chat_id
from chat_participants cp
group by cp.group_chat_id
having array_agg(user_id order by user_id) = @array_of_your_users;
可以将参数数组传递给having
子句。在两个数组中,应该以相同的方式对user_id
进行排序。
https://stackoverflow.com/questions/64900129
复制相似问题