У меня есть таблица в реляционной базе данных, в которой я кодирую дерево, используя технику, известную как Материализованный путь ( также известный как столбец 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
Примечание: я явно заинтересован в том, чтобы сделать это с использованием кодировки материализованного пути!
По теме: Какие есть варианты хранения иерархических данных в реляционной базе данных?