我有下表记录哪些用户将哪些用户引用到网站(例如简化):
| id | user_id | friend_id |
|-------|--------------------|--------------|
| 1 | 1 | 2 |
| 2 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 10 | 15 |
如何进行一种递归查询以找出最长的推荐路径?
因此,在上述情况下,用户1
会有3
的引荐跟踪,因为他们推荐的人推荐了某人,然后他们推荐的人推荐了其他人......
这很容易变得非常复杂但我只希望非常不规律地运行它。
作为一个php函数做它可能会更好,但是我很难理解它?
答案 0 :(得分:0)
所以,基本上你想要遍历树形图并确定哪一个是最长的。使用您存储父ID和子ID的数据结构,您可以使用mysql中的存储过程中的循环来执行此操作。
你也可以从php做同样的事情,然而,这会增加php和数据库在每个循环中的通信开销,所以我相信,存储过程实现更好。
This site很好地概述了如何在mysql中实现和交叉图形。
您必须修改其中的ListReached()过程以返回行数而不是列表。您甚至可以将过程更改为返回数字的函数。我还会更改create table部分以创建临时表。
然后使用max()来确定哪个是最长的路径。
根据评论中的约定,只为那些未被引用的用户ID调用此函数。