MySQL计算多个用户之间的共同朋友

时间:2013-10-05 13:18:23

标签: 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);

现在我想算上用户1和用户(2, 3, 4)

之间的共同朋友

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

以下是SQL Fiddle用于测试,select语句显示一旦写入正确的查询,我应该获得哪些字段。

编辑我认为我应该纠正自己,我不需要获得相关的用户行,我实际上需要获得每个用户ID的COUNT结果,例如{{ 1}}

2 个答案:

答案 0 :(得分:4)

这会有用吗?

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”数量

答案 1 :(得分:2)

试试这个

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;