Общие > Базы данных

Nested Set выборка ветки по id

(1/2) > >>

Phoinix:
Есть дерево каталогов построеное по принципу Nested Set, так же есть id узла ветки. Для выборки родительских узлов приходится делать 2 запроса:

1. SELECT left_key, right_key, level FROM table WHERE id = \'$id\'
2. SELECT name FROM table WHERE left_key < \'$left_key\' AND right_key > \'$right_key\' AND level < \'$level\'

т.е. сначала выбираю ключи узла, а потом относительно них саму ветку. Возможно ли объединение этох 2-х запросов в один?

Макс:
1. условие
--- Цитировать ---Phoinix:
AND level < \'$level\'
--- Конец цитаты ---

лишнее. Можно и без него

2.
Примерно так (не проверял):
SELECT t1.name FROM table t1, table t2
WHERE
t2.id = $id AND ( t1.left_key < t2.left_key AND  right_key > t2.right_key)

Phoinix:
Макс
Ага спасибо... как часы... только:

--- Цитировать ---t2.id = $id AND ( t1.left_key < t2.left_key AND t1.right_key > t2.right_key)
--- Конец цитаты ---


А насчет сравнения level - я знаю... это на всякий случай... и еще у меня индекс - INDEX (left_key, right_key, level)

Макс:

--- Цитировать ---Phoinix:
это на всякий случай
--- Конец цитаты ---
вообще в мане по mysql (я так понимаю ты его используешь) рекомендуют упрощать условия в WHERE чтобы ускорить выборку. То есть дополнительные уловия замедляют работу SELECT-запроса

Если у тебя есть индекс - left_key, right_key, level
то фактически, это значит, что у тебя 3 индекса:
left_key, right_key, level
left_key, right_key,
left_key,
См. ман про составные индексы

FANTAzeRus:
Для определения РОДИТЕЛЯ элемента используй getParent($id,$level); класс DBTree, если нужны все родилели то enumPath($ID, $showRoot=false)

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии