Mysql
 sql >> база данни >  >> RDS >> Mysql

Йерархични данни в MySql

Както беше посочено по-горе, това не е наистина рекурсивно, но ако знаете колко дълбоки стъпки трябва да преминете като максимум, можете да използвате нещо по този начин (може би да използвате PHP за генериране на заявката):

Първо бих задал родителския ID на NULL, а не на 0, но това е лично предпочитание.

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

^^ колкото и дълбоко да трябва да отидете в този случай.

[следващият бит не е строго уместен ]

След това можете да манипулирате изхода нещо по следните редове:

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. Обработка на транзакции в MySQL

  2. Как да промените външния ключ на MySQL таблица с помощта на командния ред

  3. коя заявка е по-добра и ефективна - mysql

  4. Използване на нишки за отправяне на заявки за база данни

  5. Как да променя MySQL таблица на UTF-8?