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

Hierarkiske data i MySql

Som påpeget ovenfor er dette ikke rigtig rekursivt, men hvis du ved, hvor mange trin dybt du maksimalt skal gå, kan du bruge noget i denne retning (brug måske PHP til at generere forespørgslen):

Jeg ville først indstille forældre-id til NULL i stedet for 0, men det er personlig præference.

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

^^ hvor dybt du skal gå i så fald.

[Næste bit er ikke strengt relevant ]

Du kan derefter manipulere outputtet på følgende måde:

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


  1. MySQL:Indstilling af sql_mode permanent

  2. Sådan kopieres SQL Server-databaser fra en instans til en anden

  3. mysql proxy sokker

  4. SQL Server 2017:Tilgængelige funktioner på Linux