Тема: TreeView и БД
Показать сообщение отдельно
  #2  
Старый 28.10.2011, 01:34
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Вообще говоря, мне приходилось ходить по ветвям дерева, хранящегося в иерархической таблице, но это был 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
Ответить с цитированием