sql >> Base de Datos >  >> RDS >> Mysql

MySQL:¿es posible obtener todos los subelementos en una jerarquía?

Esto es simplemente un modelo de adyacencia ¿mesa? Entonces no es posible en una consulta sin conocer la profundidad máxima.

Algo para pensar es Gestionar datos jerárquicos en MySQL (aunque no aconsejo usar el modelo de conjunto anidado para datos que se modifican periódicamente).

Con muchas uniones (izquierda), más específicamente:con tantas uniones izquierdas como la profundidad máxima del árbol, será posible en una consulta. Esta es la razón por la que mucha gente tiende a guardar la "profundidad" de una categoría específica, por lo que podrá filtrar y limitar la cantidad de uniones a la misma tabla a una cantidad más sensata.

Personalmente, para alterar datos regularmente:tiendo a configurar un disparador en una inserción/actualización, que guardará/caché la 'ruta' actual de un nodo en función de las identificaciones (por ejemplo:una ruta es '12/62/28/345 ', en el que cada paso entre el delimitador / es la clave principal de un nodo principal en el orden correcto (el principal de 345 es 28, el principal de 28 es 62, etc.)), por lo que puedo consultarlo con solo una combinación como esta (/ se usa como separador):

SELECT j.*
FROM tablename o
JOIN tablename j
WHERE j.path LIKE CONCAT (o.path,'/%')
AND  j.id != o.id  -- skip parent asked for.
WHERE o.id = <the id of the node you're looking for>;