наследство от родителей к детям

ReMaRk

Новичок
наследство от родителей к детям

Подскажите плиз как можно достать запросом кусок ветки:
есть дерево (nested sets)
*** cut ***
_id____________name___________down__up__page___level
-----------------------------------------------------------------------
_1__Каталог_____________________1___6__catalog___1
_2__-- Материалы________________2___5___null_____2
_3__---- Строительные материалы__3___4___null_____3
*** cut ***
мне нужно если мы находимся на уровне "Строительные материалы" достать ее вместе со всеми родителями, да так чтоб если в поле "page" null то значение унаследовалось бы от родительского.
то есть хочется в результате получить записи в порядке от ребенка к родителю:
3, 2, 1 и чтоб в полях "page" у 2-й и 3-й было значение "catalog"
 

ReMaRk

Новичок
поля:
down и up это тоже самое что и left и right в построении деревьев по алгоритму вложенных множеств, а level - это уровень вложенности (вспомогательное поле, которого нет в алгоритме).
можно достать записи в порядке от ребенка к родителю следующим запросом:
SELECT b.*
FROM somedb.tree AS a, somedb.tree AS b
WHERE a.down BETWEEN b.down AND b.up AND a.id = 3
ORDER BY b.down DESC
 

ReMaRk

Новичок
проблем от этого не убавилось, как получить в дочерних ветках (листьях) значение поля "page" первого же родителя, у которого оно есть
 

Макс

Старожил PHPClub
Как найти родителей для указанного узла знаешь ?
А теперь добавь условие
... AND page IS NOT NULL ORDER BY down ASC LIMIT 0,1
 

ReMaRk

Новичок
Maxim Matyukhin
не совсем понял, что ты имел ввиду? напиши плиз полный запрос...
З.Ы. Нужно получить всю ветку от выбранной и до самой верхней родительской, а не одну запись.
 

Макс

Старожил PHPClub
первым запросом получаешь ветку, проверяешь, пустой ли page, если нет, вторым запросом получаешь page
 

ReMaRk

Новичок
to Maxim Matyukhin
ты имеешь ввиду достать всю ветку а потом в цикле доставать записи и проверять page?
 

Макс

Старожил PHPClub
сорри, невнимательно прочел. Думал ты детей вытаскиваешь, а не родителей.
В таком случае твой вариант
ты имеешь ввиду достать всю ветку а потом в цикле доставать записи и проверять page
ИМХО наиболее простой
 
Сверху