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

Lin*_*nas 2 mysql sql

我需要计算A用户和其他用户列表之间的共同好友(A, B, C, D, E...)

这是我当前表的示例relations

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);
Run Code Online (Sandbox Code Playgroud)

现在我想计算用户1和用户之间共同的朋友(2, 3, 4)

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

这是用于测试的SQL Fiddle,选择语句显示了一旦编写了正确的查询我应该获取哪些字段。

编辑我认为我应该纠正自己,我不需要获取相关的用户行,我实际上需要获取每个用户 ID 的 COUNT 结果,例如[3] => 2

Jus*_*Hui 5

这行得通吗?

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
Run Code Online (Sandbox Code Playgroud)

我使用 related_to 列将表连接到自身上,按用户对分组并计算它们之间的“lated_to”数量