Выборка одного уровня дерева

WoLFiks

Не курю...
Выборка одного уровня дерева

В таблице хранится древовидная структура.
id->parent_id.
Ну и поле name хранит название.

Необходимо выбрать один уровень поддерева для указанного родителя (в данном случае родитель = 5), но хочется еще и "Имя" родителя при этом знать.

Намудрил так -
SELECT `t1`.`name` AS `p_name` , `t2` . *
FROM `table` AS `t1`
LEFT JOIN `table` AS `t2` ON `t2`.`parent_id` = `t1`.`id`
WHERE `t1`.`parent_id` =5

- т.е. выбирает один уровень для заданного "родителя" )

запрос устраивает по выводимому результату, но как-то мне не очень нравится.

Есть варианты получить ЭТОТ же результат, но другим запросом?

-~{}~ 13.11.08 20:38:

Опс..
Немного не то. Данный запрос выбирает всех потомков 2го уровня относительно известного parent_id, так вот в выборке хочется видеть еще и соответствующие имена 1го уровня вложенности для каждой полученной строки выборки!...
Вот теперь вроде правильно описал суть )
 

WoLFiks

Не курю...
Тут чем удобно получается - тем, что каждая строка содержит и имя соответствующего parent'a... А как это будет выглядеть с UNION ?
 
C UNION это юудет выглядеть например так:
первая строка - это выборка соответсвующего парента из t2
всё остальное, выборка из t1 детей парента... и некоторое количество пустых столбцов, в зависимости от того, насколько таблицы t1 и t2 отличаются друг от друга. Но, возможно, это не лучшее решение... я не настаиваю ))
 
Сверху