我需要计算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)
之间的共同 friend 数
所以我应该得到的结果是用户 2
会有一个共同的 friend ,用户 3
会有两个共同的 friend ,用户 4
会有一个共同的 friend 。
这里是 SQL Fiddle用于测试和选择语句显示编写正确查询后我应该获得哪些字段。
编辑 我想我应该纠正自己,我不需要获取相关的用户行,我实际上需要为每个用户 ID 获取 COUNT 结果,例如 [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
我使用 related_to 列将表连接到自身,按用户对分组并计算它们之间“related_to”的数量
关于MySQL计算多个用户之间的共同 friend ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19198254/