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

  • Автор темы Автор темы ReMaRk
  • Дата начала Дата начала

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"
 
поля:
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
 
проблем от этого не убавилось, как получить в дочерних ветках (листьях) значение поля "page" первого же родителя, у которого оно есть
 
Как найти родителей для указанного узла знаешь ?
А теперь добавь условие
... AND page IS NOT NULL ORDER BY down ASC LIMIT 0,1
 
Maxim Matyukhin
не совсем понял, что ты имел ввиду? напиши плиз полный запрос...
З.Ы. Нужно получить всю ветку от выбранной и до самой верхней родительской, а не одну запись.
 
первым запросом получаешь ветку, проверяешь, пустой ли page, если нет, вторым запросом получаешь page
 
to Maxim Matyukhin
ты имеешь ввиду достать всю ветку а потом в цикле доставать записи и проверять page?
 
сорри, невнимательно прочел. Думал ты детей вытаскиваешь, а не родителей.
В таком случае твой вариант
ты имеешь ввиду достать всю ветку а потом в цикле доставать записи и проверять page
ИМХО наиболее простой
 
Сверху