1
Базы данных / Обсуждение статьи ДЕРЕВО КАТАЛОГОВ NESTED SETS (ВЛОЖЕННЫЕ МНОЖЕСТВА) И УПРАВЛЕНИЕ ИМ
« : 08 Сентября 2006, 20:55:29 »
Решение было найдено благодаря 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.l AND j1.r >= t1.r)
LEFT JOIN tree AS j2 ON (j2.l >= j1.l AND j2.r <= j1.r AND j2.level IN (j1.level, j1.level + 1))
WHERE t1.id = $current_node_id AND j1.l >= tr.l AND j1.r <= tr.r AND j2.level >= tr.level
ORDER BY j2.l ASC
$root_node_id - Id корня
$current_node_id - Id выделенного узла
id - идентификатор узла
l - left key
r - right key
level - уровень
Запрос выбирает все "приоткрытое" дерево, начиная от указанного корня. Полезен для строительства "приоткрытого" меню любого уровня вложенности.
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.l AND j1.r >= t1.r)
LEFT JOIN tree AS j2 ON (j2.l >= j1.l AND j2.r <= j1.r AND j2.level IN (j1.level, j1.level + 1))
WHERE t1.id = $current_node_id AND j1.l >= tr.l AND j1.r <= tr.r AND j2.level >= tr.level
ORDER BY j2.l ASC
$root_node_id - Id корня
$current_node_id - Id выделенного узла
id - идентификатор узла
l - left key
r - right key
level - уровень
Запрос выбирает все "приоткрытое" дерево, начиная от указанного корня. Полезен для строительства "приоткрытого" меню любого уровня вложенности.