mySQL“;“共同的朋友”;查询
我试图通过Friends表获得一组“共同的朋友”: 然后我想从users表中选择*,其中userId位于friends in common集合中 朋友们mySQL“;“共同的朋友”;查询,mysql,Mysql,我试图通过Friends表获得一组“共同的朋友”: 然后我想从users表中选择*,其中userId位于friends in common集合中 朋友们 .id…dom…sub .1…..2…..1 .2…..1…..3 .3…..1…..4 .4…..1…..5 .5…..2…..4 .6…..2…..6 .7…..3…..2 .8…..3…..6 .9…..2…..3 用户 .id…fname…lname .1…..安…..福克斯 .2…..罗布…..史密斯 .3…..艾米…..奥康纳 .4
.id…dom…sub
.1…..2…..1
.2…..1…..3
.3…..1…..4
.4…..1…..5
.5…..2…..4
.6…..2…..6
.7…..3…..2
.8…..3…..6
.9…..2…..3 用户
.id…fname…lname
.1…..安…..福克斯
.2…..罗布…..史密斯
.3…..艾米…..奥康纳
.4.…标记…棕色
.5…杰克…休斯
.6.……西安……钟 从上面的表格可以看出 安(用户_1)是2、3、4和5的朋友。。。rob(用户_2)是1、3、4和6的朋友 但是,我如何编写一个查询来从两个给定用户之间的用户稳定的、共同的朋友中获取用户ID呢 我有一种感觉,这与工会有关,但欢迎任何建议
谢谢大家以下是我的想法:
SELECT distinct fic.* from users l
JOIN friends fol ON (fol.dom=l.id OR fol.sub=l.id)
JOIN users fic ON (fol.dom=fic.id OR fol.sub=fic.id)
JOIN friends fofic ON (fofic.dom=fic.id OR fofic.sub=fic.id)
JOIN users r ON (r.id=fofic.dom OR r.id=fofic.sub)
WHERE r.id=1 AND l.id=2 AND fic.id NOT IN (1,2);
我将表格别名为fic=共同的朋友,fofic=共同的朋友的朋友。我从“左”用户开始,找到他的朋友,找到与“右”用户匹配的朋友
最后一个“不在”是阻止我们说“艾米是……的朋友,她是艾米的朋友”