Выбор с измененным обходом дерева предзаказа при наличии нескольких деревьев

Я реализовал модифицированный обход дерева предзаказа как объяснено здесь по причинам оптимизации. Моя таблица примерно такая:

+----+-----------+------+-------+
| id | parent_id | left | right |
+----+-----------+------+-------+
|  1 |      NULL |    1 |     4 |
|  2 |         1 |    2 |     3 |
|  3 |      NULL |    1 |     4 |
|  4 |         3 |    2 |     3 |
+----+-----------+------+-------+

То есть в таблице существует произвольное количество деревьев. Если идентификатор родительского узла равен нулю, то это автоматически означает, что узел является самой основой его дерева.

В статье указывается, что можно очень просто выбрать всех потомков узла:

SELECT *
FROM table
WHERE
left > ?
AND
right < ?

Теперь моя проблема заключается в том, что выбор, очевидно, будет включать в себя узлы других деревьев. В конце концов, я даже не указал дерево для начала. Можно ли просто выбрать узлы из одного указанного дерева с этой моделью?

1

Решение

Не начинайте новое дерево с left = 1. Используйте MAX (right) +1 для left значение. Это не повлияет на другие манипуляции с узлами, и деревья будут разделены левым и правым диапазоном.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]