Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL通过多个用户id选择消息线程id_Mysql_Multiple Columns - Fatal编程技术网

MYSQL通过多个用户id选择消息线程id

MYSQL通过多个用户id选择消息线程id,mysql,multiple-columns,Mysql,Multiple Columns,我正在构建一个线程化的消息传递服务,并试图对一个特定的查询了如指掌。我目前正在尝试创建一个过程,当提供一个用户id数组时,该过程将返回线程id 表中只有两列:线程id和用户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_u

我正在构建一个线程化的消息传递服务,并试图对一个特定的查询了如指掌。我目前正在尝试创建一个过程,当提供一个用户id数组时,该过程将返回线程id

表中只有两列:线程id和用户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,所以我试图根据“订阅”线程的用户列表查找线程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\u id wither。
任何帮助都将不胜感激:-)谢谢

如果您只是尝试获取用户id为1和21的线程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)
如果您试图获取用户的线程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
最后一行只是确保您的不同用户_id的计数等于2,这意味着您的2用户_id为1和21。。。
如果你想找到用户线程(1,21,70),你可以将(1,21)替换为(1,21,70),并将底线更改为
HAVING COUNT(DISTINCT participants.user_id)=3
,然后它将返回包含这3个人作为参与者的线程。

你能给出一些你想要得到的输出示例吗?(从原始问题-“其中应返回2。”)因此,在用户id数组为(1,21)->2-或-(1,70)的情况下进行查询->1.它将返回一行,选择的列将是thread_idWondery!谢谢你,Tin Tran!这是你要查询的第二个查询吗?当然是!我将它插入了前面提到的子查询中,它将我带到了正确的位置。谢谢你!这将为明天的上午带来非常有成效的结果。