Mysql
 sql >> Database >  >> RDS >> Mysql

Dati gerarchici in MySql

Come sottolineato sopra, questo non è veramente ricorsivo, ma se sai quanti passi in profondità devi percorrere al massimo, puoi usare qualcosa del genere (magari usa PHP per generare la query):

Per prima cosa imposterei l'ID genitore su NULL anziché su 0, ma questa è una preferenza personale.

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

^^ per quanto tu debba andare in profondità in quel caso.

[successivo bit non strettamente pertinente ]

Puoi quindi manipolare l'output in questo modo:

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