sql - 我可以仅在一个查询中执行此操作吗?

标签 sql mysql

祝大家圣诞快乐

我了解 SQL 的方法,但我很难弄清楚这个问题。

首先这是我的表格(示例)

用户

id
name

friend

 from //userid
 to //userid

如果用户 1 是用户 10 的好友 那么你就排成1,10。 如果用户 10 不是用户 1 的好友,则用户 1 不能与用户 10 成为好友 所以你有了 1,10 10,1

这可能看起来很奇怪,但每个关系我都需要这两行。

现在我尝试进行查询以选择与给定用户拥有最多共同好友的用户。

例如,用户 1 是用户 10,9 和 7 的 friend ,用户 8 也是用户 10,9 和 7 的 friend ,我想建议用户 1 邀请他(例如 Facebook)。

我想成为拥有最多共同 friend 的前 10 个人。

输出如下

用户,共同好友数量

我不知道这是否可以在单个查询中完成?

预先感谢您的帮助。

最佳答案

SELECT u1.id, COUNT(*) FROM
user as u1, user as u2, friend as f1, friend as f2
WHERE u1.id = f1.to AND u2.id = f1.from AND -- f1 and f2 are friends 
u2.id = f2.to AND f2.from = 1234 -- and f2 is my friend, so I have a mutual friend with f1
GROUP BY u1.id

编辑1: 这只是一个一般想法。请注意,计数会不准确,会出现重复。您必须使用一些真实数据来调整查询以消除所有重复项(或找到真正的 DBA)

编辑2: 另外,我怀疑这可能不现实,因为您本质上是对用户数量的至少 n^4 个结果进行连接。即使你有 100 个,情况也会变得很糟糕。所以我很确定 Facebook 正在做一些有趣的事情。不知道什么。

关于sql - 我可以仅在一个查询中执行此操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4534314/

相关文章:

sql - Proc SQL 中的 IIF

mysql - 根据最大时间戳获取最低价格 - MySQL

java - Spring Boot 查询未更新 mysql 数据库

javascript - php:更改密码和插入当前密码的表单

mysql - 单个 SQL 可以通过不同的 where 子句获得多个计数,这可能吗?

mysql - 将整个 webform 数据库转储到 excel 文件或 csv 中?

MySQL 慢查询 'COUNT'

mysql - 如何使用本地MAMP访问远程服务器

php - 如何将 2 个 SQL 查询放在一起?

MySQL - 如何按日期范围选择一个月的数据?