cly*_*yfe 6 mysql sql tree hierarchy relational-database
我在关系数据库中有一个表,其中我使用称为物化路径(也称为Lineage列)的技术对树进行编码.也就是说,对于我树中的每个节点,我在表中有一行,并且对于每一行,我有一个字符串列ancestry,其中我存储从根节点到该行所表示的节点的路径.
是否有可能,如果是 - 如何选择按顺序排序的表中的行,那么它们应该按照访问树深度优先的顺序出现在结果集中.我使用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
Run Code Online (Sandbox Code Playgroud)
注意:我对通过物化路径编码明确感兴趣!
相关:在关系数据库中存储分层数据有哪些选项?
我相信你想要的是按字母顺序排序。
SELECT id, ancestry, ancestry + '/' + CAST(id as nvarchar(10)) AS PathEnumeration
FROM nodes
ORDER BY 3 ASC;
Run Code Online (Sandbox Code Playgroud)
我不太记得MySQL是如何连接的,但我确信我的意思很清楚。
1
1/2
1/2/4
1/3
1/3/5
1/3/5/7
1/3/6
Run Code Online (Sandbox Code Playgroud)
请注意,它是按字母顺序排序的,因此 11 将显示在 2 之前。但是,您说过您不关心兄弟排序。当然,我会将其重写为嵌套集;)