我有以下架构中的一堆数据:
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/