【发布时间】: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