Nested sets: Путь по ID...

ccop

Новичок
Nested sets: Путь по ID...

Как получить путь в виде:
/news/sport/tra/lya/lya/

..зная Id документа?

Дерево сохранено в виде вложенных множеств.

Спасибо!
 

zerkms

TDD infected
Команда форума
ccop
в любом описании данного алгоритма приводится запрос, возвращающий всех "предков", имея ИД узла
 

Sam

Новичок
нарисуй на бумажке дерево, пронумеруй узлы и разберись. так решаются ВСЕ проблемы с nested sets
 

ccop

Новичок
Пробовал, не получилось. Вообще это возможно сделать одним запросом?
 

Sam

Новичок
SELECT t2.id
FROM tree t1
JOIN tree t2 ON ( t1.cleft
BETWEEN t2.cleft AND t2.cright )
WHERE t1.link_id =$id
ORDER BY t2.cleft
 

zerkms

TDD infected
Команда форума
Sam
в этом запросе "WHERE t1.link_id =$id" - избыточная информация

и вообще:

SELECT * FROM `tree` WHERE `left_key` <= $left AND `right_key` >= $right ORDER BY `left_key`
 

RigVan

Постоянный член клуба
ccop
Если список небольшой, то пропиши правила в .htaccess , если документов много, то перенаправь (опять-таки используя .htaccess) все 404 ошибки на скрипт, который будет загружать нужные страницы (не забудь только подменить заголовки ответа сервера с 404 на 200)

или почитай вот это: http://phpclub.ru/detail/article/2001-01-16
и http://www.artlebedev.ru/kovodstvo/48/
 

alexhemp

Новичок
RigVan
Ты бы хоть вопрос почитал! То что ты написал - вообще не из той оперы.

ccop
Все элементарно

Сперва получаешь left & right указанного узла. Потом делаешь запрос как написал Sam

Можно записать в один запрос, даже на MYSQL 3.x - без вложенных запросов - используя самообъединение (частый прием при использовании Nested Sets)
 
Сверху