MySQL统计多个用户之间的好友数

MySQL统计多个用户之间的好友数,mysql,sql,Mysql,Sql,我需要计算A用户和其他用户列表(A、B、C、D、E…)之间的好友数 下面是我当前的关系表的一个示例: INSERT INTO `relations` (`id`, `related_to`, `user_id`) VALUES (1, 10, 1), (2, 12, 1), (3, 10, 2), (4, 12, 3), (5, 10, 3), (6, 10, 4), (7, 3, 5), (8, 2, 1), (9, 1, 3); 现在我想统计一下用户1和用户(2,3,4) 所以我应

我需要计算
A
用户和其他用户列表
(A、B、C、D、E…)之间的好友数

下面是我当前的
关系
表的一个示例:

INSERT INTO `relations` (`id`, `related_to`, `user_id`) VALUES
(1, 10, 1),
(2, 12, 1),

(3, 10, 2),

(4, 12, 3),
(5, 10, 3),

(6, 10, 4),

(7, 3, 5),
(8, 2, 1),
(9, 1, 3);
现在我想统计一下用户
1
和用户
(2,3,4)

所以我应该得到的结果是,用户
2
将有一个共同的朋友,用户
3
将有两个共同的朋友,用户
4
将有一个共同的朋友

下面是用于测试的select语句,它显示了一旦编写了正确的查询,我应该得到哪些字段

编辑我想我应该自我纠正,我不需要获得相关的用户行,我实际上需要获得每个用户id的计数结果,例如
[3]=>2

这行吗

SELECT r1.user_id AS first_user
, r2.user_id as second_user
, COUNT(r1.related_to) as mutual_friend_count
FROM relations r1
INNER JOIN relations r2
ON r1.related_to = r2.related_to AND r1.user_id <> r2.user_id
GROUP BY r1.user_id, r2.user_id
选择r1.user\u id作为第一个用户
,r2.user\u id作为第二个用户
,计数(r1.相关的)作为共同的朋友计数
来自关系r1
内部连接关系r2
在r1.related_to=r2.related_to和r1.user_id r2.user_id上
按r1.user\U id分组,r2.user\U id分组
我使用related_to列将表连接到它自己,按用户对分组,并计算它们之间“related_to”的数量

SELECT count(s.sum),s.user_id 
from (select count(id) as sum,user_id from relations
WHERE user_id != 1 and RELATED_TO in (select related_to from relations where user_id = 1)  group by RELATED_TO,user_id) as s group by user_id;

是的,如果是这样的话,再问一个问题,这会不会很慢,比如说10万行?如果这两个字段都被索引,它会很快。如果不是的话,我仍然认为这会比较快,因为它们都是整数字段。在你尝试之前,你可能不会知道。