MYSQL通过多个用户ID选择消息线程ID [重复]

Posted

技术标签:

【中文标题】MYSQL通过多个用户ID选择消息线程ID [重复]【英文标题】:MYSQL Select message thread id by multiple user ids [duplicate] 【发布时间】:2016-04-26 20:40:18 【问题描述】:

我正在整合一个线程消息传递服务,并且我正试图围绕一个特定的查询。我目前正在尝试创建一个过程,该过程将在提供 user_ids 数组时返回 thread_id。

表中只有两列:thread_id & user_id。 我在表中有 4 行用于测试:

INSERT INTO thread_users (`thread_id`, `user_id`) VALUES (1,1);
INSERT INTO thread_users (`thread_id`, `user_id`) VALUES (1,70);
INSERT INTO thread_users (`thread_id`, `user_id`) VALUES (2,1);
INSERT INTO thread_users (`thread_id`, `user_id`) VALUES (2,21);

此示例用户 1 向用户 70 发送消息以启动第一个线程,然后向用户 21 发送消息以启动线程 2;

由于我已经拥有了两个用户的 ID,因此我试图得出的是根据“订阅”线程的用户列表找到 thread_id。

SELECT participants.*
FROM (
    SELECT DISTINCT `thread_id`
    FROM `thread_users` 
    WHERE `thread_users`.`user_id` IN (1, 21)
    GROUP BY `thread_id`
) AS participants

将通过几个连接请求更多数据,尽管我不想将其包含在这个问题中......所以,话虽如此,让我们将查询缩短为:

SELECT DISTINCT `thread_id`
FROM `thread_participants` 
WHERE `thread_participants`.`user_id` IN (1, 21)
GROUP BY `thread_id`

其中应该返回 2。

我认识到如果有 2 个用户与一个线程或 20 个用户关联,则此查询应该返回正确的 thread_id。 任何帮助将不胜感激:-) 谢谢!

【问题讨论】:

你能给出一些你想要得到的输出例子吗? (来自原始问题 - “其中应该返回 2。”)因此,查询 user_id 数组为 (1,21) -> 2 -or- (1, 70) ->1 .它将返回一行,选择的列将是 thread_id 【参考方案1】:

如果您只是想获取具有 user_id 1 和 21 的 thread_id 的所有参与者

SELECT participants.user_id
FROM thread_users as participants
INNER JOIN thread_users as my_people
ON my_people.thread_id = participants.thread_id
WHERE my_people.user_id IN (1,21)

如果您尝试获取用户的 thread_id,请确保他们都是该主题的参与者。然后试试这个查询

SELECT participants.thread_id,COUNT(DISTINCT participants.user_id) as participants
FROM thread_users as participants
WHERE participants.user_id IN (1,21)
GROUP BY participants.thread_id
HAVING COUNT(DISTINCT participants.user_id)=2

最后一行只是确保您的 DISTINCT user_id 的 COUNT 等于 2,这意味着您的 2 user_id 为 1 和 21... 如果您想查找用户线程 (1,21,70),您可以将 (1,21) 替换为 (1,21,70) 并将底线更改为 HAVING COUNT(DISTINCT participants.user_id)=3 然后它将返回具有这 3 个人作为参与者。

【讨论】:

太棒了!谢谢你,Tin Tran! 是您第二次查询吗? 当然是!如前所述,我将它插入到子查询中,它让我找到了正确的位置。谢谢!这将使明天的早晨非常富有成效。

以上是关于MYSQL通过多个用户ID选择消息线程ID [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从mysql中获取多个ID相关值[重复]

我们可以通过一个id选择器设置多个html标签吗? [重复]

通过 Mailcore 2 获取 Gmail:线程 ID、消息 ID 和 UID

在MySQL中获取多个用户的最后2行[重复]

PHP MYSQL选择最后插入的ID [重复]

使用 PHP 在 mySQL 中查找多个用户的帐户 [重复]