祝大家圣诞快乐
我了解 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/