php - MySQL统计一张表中最大的引用路径

标签 php mysql

我有下表记录了哪些用户将哪些用户推荐到该网站(例如简化的):

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

如何进行递归查询来计算出最长的推荐路径?

因此,在上述实例中,用户 1 的推荐轨迹为 3,因为他们推荐的人推荐了某人,然后他们推荐的人又推荐了其他人。 .

这很容易变得非常复杂,但我只想非常不规则地运行它。

将其作为 php 函数来实现可能会更好,但我很难理解它?

最佳答案

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

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

This site很好地概述了如何在 mysql 中实现和遍历图。

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

然后使用 max() 确定最长的路径。

按照评论中的约定,仅为那些未引用的用户 ID 调用此函数。

关于php - MySQL统计一张表中最大的引用路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33144733/

相关文章:

php - 通过mysql中的php从android存储以base64编码的图像

php - .\libraries\classes\Dbi\DbiMysqli.php#213 中的警告

java - MySQL - 如何在分页前计算行数?

php - 未捕获的语法错误 : Unexpected token }

php - 如何从 PHP 方法返回错误?

php - 在 Laravel 5.2 中调整图像大小

java - 交易问题

php - 在 Codeigniter 中将 If Else 与 Foreach 一起使用

javascript - 自动添加复选框值并保留其名称以存储在数据库中

php - 使用左连接子查询优化搜索查询