我需要计算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}}
答案 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;