【问题标题】:SQL query to retrieve conversations records检索对话记录的 SQL 查询
【发布时间】:2014-02-24 13:52:37
【问题描述】:

我有 2 个 SQL 表:ConversationsUsers。对话有很多用户,用户也有很多对话。所以我有一个连接表Conversations_users,它有两个字段:conversation_iduser_id

现在我知道了一些用户的 ID,我想检索所有这些用户都在同一个对话中的对话。有人可以帮助我吗?

【问题讨论】:

  • 你尝试了什么?你的代码在哪里?
  • 发布你的架构,因为你在这里只存储 id 我认为你想检索会话的 cmets,所以你需要加入 3 个表
  • 你真的需要 3 个表,对话,消息,用户,
  • 请注意,我们有时使用术语“线程”来表示在线“对话”。

标签: mysql sql


【解决方案1】:

一种方法是按用户、按会话分组过滤Conversations_users 表,然后为包含必要数量(不同)用户的组过滤结果组:

SELECT   Conversations.*
FROM     Conversations JOIN Conversations_users USING (conversation_id)
WHERE    Conversations_users.user_id IN (1,2,3)
GROUP BY conversation_id
HAVING   COUNT(DISTINCT Conversations_users.user_id) = 3

如果保证(conversation_id, user_id)Conversation_users 中是唯一的(例如,它是该表的PRIMARY KEY),则可以使用COUNT(*) 而不是(昂贵的)COUNT(DISTINCT Conversations_users.user_id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2020-07-11
    • 2017-07-12
    • 1970-01-01
    相关资源
    最近更新 更多