MySQL计算一个表中最大的引用跟踪

时间:2015-10-15 09:28:07

标签: php mysql

我有下表记录哪些用户将哪些用户引用到网站(例如简化)

| id    |            user_id |    friend_id |
|-------|--------------------|--------------|
| 1     |                1   |          2   |
| 2     |                2   |          3   |
| 3     |                3   |          4   |
| 4     |                10  |          15  |

如何进行一种递归查询以找出最长的推荐路径?

因此,在上述情况下,用户1会有3的引荐跟踪,因为他们推荐的人推荐了某人,然后他们推荐的人推荐了其他人......

这很容易变得非常复杂但我只希望非常不规律地运行它。

作为一个php函数做它可能会更好,但是我很难理解它?

1 个答案:

答案 0 :(得分:0)

所以,基本上你想要遍历树形图并确定哪一个是最长的。使用您存储父ID和子ID的数据结构,您可以使用mysql中的存储过程中的循环来执行此操作。

你也可以从php做同样的事情,然而,这会增加php和数据库在每个循环中的通信开销,所以我相信,存储过程实现更好。

This site很好地概述了如何在mysql中实现和交叉图形。

您必须修改其中的ListReached()过程以返回行数而不是列表。您甚至可以将过程更改为返回数字的函数。我还会更改create table部分以创建临时表。

然后使用max()来确定哪个是最长的路径。

根据评论中的约定,只为那些未被引用的用户ID调用此函数。