with recursive query multiple find_in_set data child all adjacency mysql recursion hierarchy

query - mysql select recursive get all parent with multiple level



MySQL-Recordando una estructura de árbol (4)

Tengo una tabla de base de datos que vincula ubicaciones juntas; una ubicación puede estar en una ubicación, que puede estar dentro de otra ubicación.

location (<id>, ....) location_parent (<location_id>, <parent_id>)

Aquí está el MySQL / PHP para bajar por una profundidad de uno:

$sql = "SELECT id FROM se_locations_services WHERE parent_locationid IN ( SELECT location_id FROM se_locations_parent WHERE parent_id = ''$locationid'' )";

¿Cómo puedo, dada la ubicación de un padre, obtener todas las ubicaciones de sus descendientes, sin importar cuán profundo, simplemente usando MySQL?


Dado que las instrucciones de mysql pueden devolver solo datos estructurados en tablas, ¿cómo se imagina la estructura de árbol devuelta?

Es posible hacer una selección con la tabla [parent_id, child_id], pero requiere una tabla temporal y la he visto hacer en DB2, no en MySQL.

Consulte este artículo para la implementación en estructuras tipo árbol almacenadas en MySQL: http://articles.sitepoint.com/article/hierarchical-data-database/



MySQL carece de compatibilidad nativa con las funciones jerárquicas, por lo que tendrá que emularlas utilizando variables de sesión para mantener el estado de recursión.

Vea este artículo sobre cómo implementar la función:


Hay un artículo atractivo en mysql.com que describe varias formas de administrar datos jerárquicos. Creo que proporciona una solución completa a su pregunta, y muestra varios enfoques menos simples, pero más rápidos (por ejemplo, conjuntos anidados).