Вообще говоря, мне приходилось ходить по ветвям дерева, хранящегося в иерархической таблице, но это был MS SQL Server (версия, начиная с 5-й). Там для рекурсии можно использовать шаблоны (CTE - common table equation), которые описываются так:
PHP код:
with [recursive] <alias1> [(<список полей>)]
as ( <Select1> )
<Select2>
В квадратных скобках необязательные параметры, уголки - для описания (их не будет).
В Select2 используется шаблон.
Select1 на самом деле содержит два Select'а, соединённых UNION ALL. Первый содержит отправную точку, второй - условие направления (к предкам или потомкам). Рекурсия заканчивается, когда Select2 возвращает пустой набор.
Например:
Код:
WITH tree(num, parent, someth, path1) AS (
SELECT ID, ID_Parent, Data, CAST(ID AS varchar(5))
FROM Table1
WHERE (ID = 1)
UNION ALL
SELECT V.ID, V.ID_Parent, V.Data, CAST(path1 + '_' + CAST(V.ID AS varchar(5)) AS varchar(5))
FROM Table1 AS V INNER JOIN
tree AS T ON T.num = V.ID_Parent)
SELECT num, parent, someth, path1
FROM tree AS tree_1
ORDER BY path1
Результат:
tree.jpg