2010-03-04 18 views
8

Tengo una tabla de base de datos que vinculan ubicaciones juntas; una ubicación puede estar en una ubicación, que puede estar dentro de otra ubicación.MySQL - Recurriendo a una estructura de árbol

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

Aquí está el MySQL/PHP para bajar a una profundidad de un:

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

¿Cómo, dada una ubicación padres, se lleva todos sus lugares descendientes, no importa qué tan profundo, simplemente usando MySQL?

+0

Ver http://stackoverflow.com/questions/587488/handling-hierarchy-data-in-database –

Respuesta

20

Hay una good-looking article encima en mysql.com esbozar diversas formas de gestión de 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).

+3

+1 artículo muy interesante que has vinculado aquí. –

+0

artículo ya no está disponible. –

+0

@Ed la máquina de regreso aún lo tiene. Actualizado. –

0

Dado que las declaraciones MySQL puede solo devuelve datos estructurados en tablas, ¿cómo te imaginas 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 hacerlo en DB2, no en MySQL.

Comprobar este artículo para la implementación de estructuras en forma de árbol almacenados en MySQL: http://articles.sitepoint.com/article/hierarchical-data-database/

1

MySQL carece de soporte nativo de funciones jerárquicas, por lo que tendrá que emular el uso de variables de sesión para mantener el estado de la recursividad.

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

Cuestiones relacionadas