用户的好友表如下:
user_firendlist(Id,userId,firendId)user_firendlist有12条记录如下:
Id   userId   firendId
0    1        3
1    1        4
2    2        3
3    2        6
4    3        5
5    3        6
6    4        5
7    4        2
8    5        2
9    5        7
10   6        7
11   6        8请构造最优化的SQL查询实现输出好友1和好友8之间的最短关系链,输出结果类似如下:
1->3->6->8关系链1->3->6->8的寓意:user1先通过user3找到user6,然后user1再通过user6找到user8。

解决方案 »

  1.   

    一条sql实现不了  需要写存储过程
      

  2.   

    参考下贴,用同样的方法,且判断当好友8出现时则可以停止搜索,直接输出。http://blog.csdn.net/acmain_chm/article/details/4142971
    MySQL中进行树状所有子节点的查询
    在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们...
      

  3.   

    楼上的回答有很大的帮助,根据六度人脉原理,已确定最大深度为6,超出深度为6以上的输出无法找到关系链即可。如果楼上能给出Mysql下对应的SQL代码那就太好了,如果mysql实现不了用别的数据库也行,对sql语句的条数和是否有后台脚本的参与不限制,只要能达到最佳优化即可,欢迎贴代码。