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

Datos Jerárquicos en MySql

Como se señaló anteriormente, esto no es realmente recursivo, pero si sabe cuántos pasos de profundidad necesita como máximo, puede usar algo similar (tal vez use PHP para generar la consulta):

Primero establecería el ID principal en NULL en lugar de 0, pero esa es una preferencia personal.

SELECT * FROM table t1
LEFT JOIN table t2 ON t2.parent_id = t1.role_id
LEFT JOIN table t3 ON t3.parent_id = t2.role_id
WHERE t1.parent_id IS NULL

^^ por muy profundo que tengas que ir en ese caso.

[siguiente bit no estrictamente relevante ]

Luego puede manipular la salida algo a lo largo de estas líneas:

SELECT
        (CASE 
        WHEN (t1.name IS NULL AND t2.name IS NULL) THEN t3.name
        WHEN (t1.name IS NULL AND t2.name IS NOT NULL) THEN t2.name
        ELSE t1.name END)  AS first,
        (CASE 
        WHEN (t1.name IS NOT NULL AND t2.name IS NOT NULL) THEN t2.name
        WHEN (t2.name IS NULL AND t3.name IS NOT NULL) THEN NULL
        ELSE t3.name END)  AS second,
        (CASE 
        WHEN (t1.name IS NOT NULL) THEN t3.name
        ELSE  NULL END)  AS third
FROM