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

标签 mysql sql

我需要计算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/

相关文章:

mysql - Doctrine - 自动插入行关联表

mysql - 在实现以下触发器 :- Subquery returns more than 1 row 后,我在invoice_line_item 中添加行时遇到错误

php - MySQL - 仅对前 3 行进行排序

mysql - 子查询中选定的列(多列)未显示

sql - 替换字符串中的字符而不影响名称

mysql - 使用 Sequel Pro 本地备份 MySQL 数据库

mysql - 如何知道表是否有已删除的行?

php - 如何在 phpmyadmin 4.1.6 中添加密码的 md5 散列?

javascript - 如何在脚本中使用SQL查询

mysql - 在实时机器 (MySQL) 上更新 MyISAM 表