Profundidad en los árboles de mesa de MySQL y de cierre.
-
21-12-2019 - |
Pregunta
¿Cómo iría sobre la población de la columna de profundidad / longitud de una tabla de cierre al insertar un nuevo nodo al árbol?
Los valores en ancestro y descendiente son ID de otra tabla que representan las páginas a disponer en una estructura de árbol.
Tabla de cierre:
ancestor descendant depth
1 1 0
1 2 1
1 3 1
1 4 1
2 2 0
3 3 0
4 4 0
Esto insertará correctamente el ancestro y los descendientes, pero no estoy seguro de cómo rellenar la columna de profundidad Insertar consulta:
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}';
¿Cuál es la mejor manera de ir sobre esto?Muchas gracias!
Solución
Agregar profundidad + 1 a la primera selección.
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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow