2

我需要计算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,显示了一旦编写了正确的查询,我应该得到哪些字段。

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

4

2 回答 2

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

于 2013-10-05T13:30:57.217 回答
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;
于 2013-10-05T14:00:46.240 回答