【问题标题】:Check if conversation for specified participants in group chat application already exists检查群聊应用程序中指定参与者的对话是否已存在
【发布时间】:2020-11-19 05:17:54
【问题描述】:

我正在编写支持群聊的聊天应用程序。创建群聊时,您指定收件人,然后单击“创建”,为收件人创建群聊。 当用户选择一些现有群聊中已经存在所有收件人的收件人时,我想重定向到它而不是创建新的,这意味着每个群聊都有唯一的参与者。我不知道如何检查这样的对话是否已经存在。

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 方言都可以。查询应该支持任意数量的用户 ID。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您可以使用以下方式检查:

    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_ids 在两个数组中的排序方式应该相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-04
      • 2015-12-28
      • 1970-01-01
      • 2015-11-22
      • 2022-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多