El artículo Managing Hierarchical Data in MySQL proporciona un excelente ejemplo de cómo usar conjuntos anidados y ofrece ejemplos de muchas consultas comunes, incluida esta.
aquí es cómo encontrar los elementos secundarios inmediatos de un nodo:
SELECT node.name, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth
FROM nested_category AS node,
nested_category AS parent,
nested_category AS sub_parent,
(
SELECT node.name, (COUNT(parent.name) - 1) AS depth
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.name = '**[[MY NODE]]**'
GROUP BY node.name
ORDER BY node.lft
)AS sub_tree
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
AND sub_parent.name = sub_tree.name
GROUP BY node.name
HAVING depth = 1
ORDER BY node.lft;
y luego combinar eso con el hecho de que un nodo hoja tendrá rgt
igual a lft + 1
, y ya está. perdón el juego de palabras.
La máquina de retorno tiene [una copia del artículo enlaces de nickf] (http://web.archive.org/web/20100105135622/http://dev.mysql.com/tech-resources/articles/hierarchical- data.html). – Segfault
@Segfault El artículo está ahora en el sitio de su autor, corrigí el enlace en la respuesta. –
Esto requiere (o más bien asume) que todos los nodos tienen nombres únicos, que a menudo no lo hacen en la práctica – Madbreaks