Mysql
 sql >> Base de données >  >> RDS >> Mysql

Données hiérarchiques dans MySql

Comme indiqué ci-dessus, ce n'est pas vraiment récursif, mais si vous savez combien d'étapes vous devez parcourir au maximum, vous pouvez utiliser quelque chose dans ce sens (peut-être utiliser PHP pour générer la requête) :

Je définirais d'abord l'ID parent sur NULL plutôt que sur 0, mais c'est une préférence personnelle.

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

^^ quelle que soit la profondeur à laquelle vous devez aller dans ce cas.

[la partie suivante n'est pas strictement pertinente ]

Vous pouvez ensuite manipuler la sortie comme suit :

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