Глубина в MySQL и закрытие столовых деревьев
-
21-12-2019 - |
Вопрос
Как бы я пошел на заполнение столбца глубины / длины замыкания стола при вставке нового узла на дерево?
Значения в предке и потомке являются идентификаторами из другой таблицы, которые представляют собой страницы, которые будут расположены в древесной структуре.
Закрытие таблицы:
ancestor descendant depth
1 1 0
1 2 1
1 3 1
1 4 1
2 2 0
3 3 0
4 4 0
.
Это будет правильно вставить предку и потомки, но я не уверен, как заполнить колонну глубины Вставьте запрос:
INSERT INTO closure_tree_path (ancestor, descendant)
SELECT ancestor, '{$node_id}' FROM closure_tree_path
WHERE descendant = '{$parent_id}'
UNION ALL SELECT '{$node_id}', '{$node_id}';
.
Какой лучший способ пойти об этом?Спасибо кучу!
Решение
Добавить глубину + 1 к первому выбору.
INSERT INTO closure_tree_path (ancestor, descendant, depth)
SELECT ancestor, '{$node_id}', depth+1 FROM closure_tree_path
WHERE descendant = '{$parent_id}'
UNION ALL SELECT '{$node_id}', '{$node_id}', 0;
. Не связан с StackOverflow