Вопрос по Nested Sets

rembo

Новичок
Вопрос по Nested Sets

Пытаюсь использовать сабж для создания классификатора товаров.
Есть таблица 'category' с полями cid, cleft, cright, clevel, title.
Для ее создания воспользовался dbtree.

Без параметров скрипт выводит дерево каталогов первого уровня, по нажатию
на одну из категорий в тот же скрипт приходит значение $cleft.
(Так же можно организовать чтоб приходили значения $cid, $cright, $clevel)

По выбору например подкатегории Обувь раздела Одежда
Нужно вывести дерево такого вида


Мебель
Одежда
- Шубы
- Дубленки
- Обувь
- - Туфли
- - Кроссовки
- - Сапоги
- - Ботинки
- Шапки
Сувениры
Бытовая химия

Т.е. непосредственных потомков родительских категорий выбранной категории
(загнул кажись)

Можно ли вывести такое дерево единственным запросом?
Попробовал вот-так:

SELECT * FROM category AS t1, category AS t2
WHERE (($cleft BETWEEN t1.cleft AND t1.cright) and (t1.clevel>0) and
(t2.cleft BETWEEN t1.cleft AND t1.cright) and (t2.clevel-1=t1.clevel))

Не работает.
Здесь первое условие находит всех родителей подкатегории,
второе запрещает вывод корня, третье как мне казалось,
должно было выводить потомков найденых родительских
категорий, и четвертое ограничение для вывода только
непосредственных потомков категории.

Помогите составить запрос, или скажите мне, что лучше
выбрать всех предков, а потом делать несколько отдельных
запросов.
 

Макс

Старожил PHPClub
имхо это надо делать в 2 запроса.
первым получаешь параметры родителей для узла "обувь"
SELECT cleft, cright, clevel, FROM category WHERE cleft < $cleft AND cright > $cright;
потом по этим данным формируешь запрос вида
Код:
SELECT * FROM category WHERE 
clevel > 0 AND (
 cleft BETWEEN $cleft AND $cright AND clevel = $clevel+1 OR
 cleft BETWEEN $cleft1 AND $cright1 AND clevel = $clevel1+1 OR
 cleft BETWEEN $cleft2 AND $cright2 AND clevel = $clevel2+1 OR
 ....
) ORDER BY cleft DESC
$cleft, $cright, $clevel - параметры категории "обувь"
$cleftN, $crightN, $clevelN - параметры, взятые из первого запроса.
 

rembo

Новичок
Спасибо! Так и сделаю, все равно вложенность не такая уж и большая :)
 
Сверху