gpt4 book ai didi

mysql - 从使用物化路径编码树的表中选择,按深度优先排序(无递归/ltree)

转载 作者:可可西里 更新时间:2023-11-01 06:51:36 24 4
gpt4 key购买 nike

我在关系数据库中有一个表,我在其中使用称为 Materialized path 的技术对树进行编码(也称为沿袭列)。也就是说,对于我树中的每个节点,我在表中都有一行,对于每一行,我都有一个名为 ancestry 的字符串列,我在其中存储从根节点到由此代表的节点的路径行。

是否可能,如果是 - 如何选择表中按预序排序的行,即它们应该按照访问树的顺序出现在结果集中depth-first .我使用 MySQL - 所以没有递归查询,也没有 ltree 扩展

例如,一棵树,它是表格,并按预序选择:

 1        SELECT * FROM nodes   SELECT * FROM nodes ORDER BY ?depth_first_visit_order?
| \ id | ancestry id | ancestry
2 3 ------------- -------------
| | \ 1 | NULL 1 | NULL NOTE: I don't care about the
4 5 6 2 | 1 2 | 1 order of siblings!
| 3 | 1 4 | 1/2
7 4 | 1/2 3 | 1
5 | 1/3 5 | 1/3
6 | 1/3 7 | 1/3/5
7 | 1/3/5 6 | 1/3

注意:我对通过物化路径编码执行此操作非常感兴趣!
相关:What are the options for storing hierarchical data in a relational database?

最佳答案

我相信你想要的是按字母排序。

SELECT id, ancestry, ancestry + '/' + CAST(id as nvarchar(10)) AS PathEnumeration
FROM nodes
ORDER BY 3 ASC;

我不太记得 MySQL 是如何连接的,但我确定我的意思很清楚。

1
1/2
1/2/4
1/3
1/3/5
1/3/5/7
1/3/6

请注意,它是按字母顺序排序的,因此 11 会出现在 2 之前。但是,您说过您不关心 sibling 的顺序。当然,我会将其重写为嵌套集;)

关于mysql - 从使用物化路径编码树的表中选择,按深度优先排序(无递归/ltree),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9097064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com