sql >> Databáze >  >> RDS >> Mysql

Hierarchická data v MySql

Jak bylo uvedeno výše, toto není skutečně rekurzivní, ale pokud víte, kolik kroků hluboko musíte jít maximálně, můžete použít něco v tomto smyslu (možná použít PHP ke generování dotazu):

Nejprve bych nastavil rodičovské ID na NULL místo 0, ale to je osobní preference.

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

^^ jak hluboko v tom případě musíte jít.

[další bit není přísně relevantní ]

S výstupem pak můžete manipulovat něco v tomto smyslu:

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 GROUP BY více sloupců z různých tabulek

  2. Jak INSTR() funguje v MariaDB

  3. MySQL InnoDB Cluster 8.0 – Kompletní průvodce operací:Část druhá

  4. Jak VLOŽIT záznam nebo AKTUALIZOVAT, pokud již existuje?