Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hierarchische Daten in MySQL

Wie oben erwähnt, ist dies nicht wirklich rekursiv, aber wenn Sie wissen, wie viele Schritte Sie maximal gehen müssen, können Sie etwas in dieser Richtung verwenden (vielleicht verwenden Sie PHP, um die Abfrage zu generieren):

Ich würde zuerst die übergeordnete ID auf NULL anstatt auf 0 setzen, aber das ist eine persönliche Präferenz.

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

^^ wie tief man in diesem Fall auch gehen muss.

[nächster Teil nicht unbedingt relevant ]

Sie können die Ausgabe dann wie folgt manipulieren:

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