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!

¿Fue útil?

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
scroll top