Общие > Базы данных
Обсуждение статьи ДЕРЕВО КАТАЛОГОВ NESTED SETS (ВЛОЖЕННЫЕ МНОЖЕСТВА) И УПРАВЛЕНИЕ ИМ
Arikon:
Помогите решить задачку. Вот исходные данные
1.
2.
По условию известны узлы, выделенные оранжевым. Нужно выбрать все узлы, выделенные зеленым.
Phoinix:
Твои предложения?
Arikon:
Решение было найдено благодаря ru_mysql коммунити в livejournal
SELECT DISTINCT
j2.*
FROM tree AS t1
LEFT JOIN tree AS tr ON tr.id = $root_node_id
LEFT JOIN tree AS j1 ON (j1.l = t1.r)
LEFT JOIN tree AS j2 ON (j2.l >= j1.l AND j2.r = tr.l AND j1.r = tr.level
ORDER BY j2.l ASC
$root_node_id - Id корня
$current_node_id - Id выделенного узла
id - идентификатор узла
l - left key
r - right key
level - уровень
Запрос выбирает все "приоткрытое" дерево, начиная от указанного корня. Полезен для строительства "приоткрытого" меню любого уровня вложенности.
Навигация
Перейти к полной версии