请事先感谢你的回答。我需要做一件这样的事情
我有一个表友谊(id,user_id,friend_id,status,timestamp)
所以我想说我是user_id = 43的用户,我正在访问user_id = 15的用户
在个人资料中,它应该是友谊的连接线
让我描述一下......假设我与用户有友谊(user_id = 3,user_id = 3的用户是我正在访问的用户的朋友。
所以在网站上我会看到
连接
MyIcon-> UserIcon(15) - > UserIcon(3) - > UserIcon(我正在访问)
仅在所有人的友情状态为status = 1 ...
的情况下有人可以告诉我查询应该是什么样的吗?
答案 0 :(得分:1)
使用普通的MySQL,没有本地方法可以做到这一点。您必须决定要查看的深度,并使用该数量的JOIN操作来查看您是否可以从一个用户ID“到达”另一个用户ID,或者您可以为社区贡献的图形引擎为旋转:
http://openquery.com/products/graph-engine
(这涉及使用非官方的二进制AFAIK,也许已经可以作为插件使用了,但我不确定是否可以使用)
使用该引擎,您可以在一个简单的查询中执行此操作:
SELECT * FROM foo WHERE latch = 1 AND origid = 15 AND destid = 43;
然后,对于从用户15到用户43必须前往的每个链接,这将返回一行。您将使用应用程序代码来很好地显示它。
答案 1 :(得分:1)
如果您将此建模为嵌套集建模层次结构而不是您拥有的邻接列表模型,那么此查询将是微不足道的。实际上,您正在考虑使用递归,这对于关系数据库来说并不自然。
有关建模层次结构的一些重要信息,请查看Joe Celko's book。
答案 2 :(得分:0)
您可以查看有关递归选择的问题的this回答,以查看您可以在mySql方面做的黑客攻击。它显示了如何创建层次结构以供选择。
在mySql(ANSI SQL)中,没有“本地”方式来执行此类查询。