Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dane hierarchiczne w MySQL

Jak wskazano powyżej, nie jest to naprawdę rekurencyjne, ale jeśli wiesz, ile kroków musisz przejść jako maksimum, możesz użyć czegoś podobnego (być może użyj PHP do wygenerowania zapytania):

Najpierw ustawiłbym identyfikator rodzica na NULL, a nie 0, ale to osobiste preferencje.

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

^^ niezależnie od tego, jak głęboko trzeba się w tym przypadku zagłębić.

[następny bit nie jest ściśle związany ]

Następnie możesz manipulować danymi wyjściowymi w następujący sposób:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Widoki MySQL

  2. CI - pokaż błąd bazy danych lub błąd

  3. Wyszukiwanie tablic SQL

  4. Rails 3 ActiveRecord:Uporządkuj według skojarzeń

  5. Tworzenie kopii zapasowej bazy danych w MySQL za pomocą C#