【问题标题】:How to find distance to root in MySql tree structured data?如何在 MySql 树结构数据中查找到根的距离?
【发布时间】:2015-10-11 21:15:54
【问题描述】:

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

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

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

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

这个数据只有一个根。

这可以在不修改此架构的情况下纯粹通过 SQL 完成吗?或者是否有必要将内存中的数据拉入某个服务器端应用程序并像传统树一样对其进行建模?

【问题讨论】:

    标签: mysql sql tree database-schema hierarchical-data


    【解决方案1】:

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

    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 的距离保存到不同的表中来调整它以使其工作(就像我说我没有测试过它)来提高它的性能。

    【讨论】:

    • 如何查看结果?如果我想将答案(到根的距离)附加到每一行的新列怎么办?现在我在这里收到一个错误,说子查询返回超过 1 行。
    • 还要提一下数据的分支因子不固定。
    • 这个程序肯定行不通。这个想法可以作为一个过程或函数起作用,但不能作为一个混合体。
    • @GordonLinoff 为什么它不起作用?有关如何解决它的任何建议?
    • @AdamBronfin 。 . .让我们从观察过程不返回值开始。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多