mysql - 如何在MySql树结构数据中找到到根的距离?

标签 mysql sql tree database-schema hierarchical-data

我有以下架构中的一堆数据:

Id | category | remote_id
-------------------------

其中remote_id引用同一个表中的另一个ID。

如何查询这个,以便对于每条记录,我都可以找到到根元素的距离,该根元素定义为 Id 和 remote_id 相同的行?

此数据中只有一个根。

是否可以纯粹通过 SQL 来完成此操作而不修改此架构?或者我是否有必要将内存中的数据拉入某些服务器端应用程序并将其建模为传统的树?

最佳答案

像这样的程序应该可以工作,尽管我还没有测试过:

CREATE PROCEDURE getDistanceToRoot
(
id INT
)
BEGIN
  DECLARE distance INT DEFAULT 0;
  DECLARE parentId INT DEFAULT NULL;
  SET parentId = (SELECT remoteid from table where id = id);
  WHILE (id != parentId) DO
    SET count = count + getDistanceToRoot(parentId);
    SET parentId = (SELECT remoteid from table where id = parentId);
 END WHILE;
  SELECT distance;
END;

它也会很慢。作为过程的一部分,一旦你调整它的工作(就像我说的我没有测试它),你可以通过在获取每个 id 后将其距离保存到不同的表中来提高它的性能.

关于mysql - 如何在MySql树结构数据中找到到根的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33070202/

相关文章:

sql - 用最后的结果填表

algorithm - AVL 树 - LST 和 RST 之间的最大节点数

java - 用于生成邻接矩阵的 k 数组树

javascript - 检查树是否展开或打开(Selenium/Python)

mysql - 如何从子查询中获取具体行来比较主查询中的值?

mysql - Perl 将空时间戳打印到 csv 文件

mysql - 在 MySQL 中检查时间戳是否来自今天

PHP PDO语句过滤记录

自定义帖子类型和多个自定义字段的 SQL 查询

mysql - SQL:计算表中不同行值的数量