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

Как да намерите йерархичния път за представяне на дърво

Можете да използвате съхранена процедура, както споменахте във вашия въпрос, тъй като вмъкването може да бъде дълбоко до 7 нива.

Запазена процедура

СЪЗДАВАНЕ НА ПРОЦЕДУРА updatePath()BEGINdeclare cnt, n int; изберете count(*) в n от foo, където parent_id е нула; update foo a, foo b set a.path =b.name, където b.parent_id е нула и a.parent_id =b.id; изберете count(*) в cnt от foo, където пътят е нулев; докато cnt> n актуализира foo a, foo b зададе a.path =concat(b.path, '/', b.name), където b.path не е null и a.parent_id =b.id; изберете count(*) в cnt от foo, където пътят е нулев; край докато;КРАЙ// 

За да проверим действителния запис, току-що отпечатахме обикновените записи с нулева стойност в колоната за път

изберете * от foo 

Резултати :

<предварителен код>| ID | ИМЕ | PARENT_ID | ПЪТ |------------------------------------------------| 1 | корен1 | (нула) | (нула) || 2 | дете1 | 1 | (нула) || 3 | subchild1 | 2 | (нула) || 4 | дете2 | 1 | (нула) || 5 | дете3 | 1 | (нула) || 6 | subchild2 | 4 | (нула) || 7 | подподчинение1 | 6 | (нула) |

Извикване на процедурата :

път за актуализиране на обаждане 

Резултат след изпълнение на процедурата :

изберете * от foo 

Резултати :

<предварителен код>| ID | ИМЕ | PARENT_ID | ПЪТ |------------------------------------------------ ----------| 1 | корен1 | (нула) | (нула) || 2 | дете1 | 1 | корен1 || 3 | subchild1 | 2 | корен1/дете1 || 4 | дете2 | 1 | корен1 || 5 | дете3 | 1 | корен1 || 6 | subchild2 | 4 | корен1/дете2 || 7 | подподчинение1 | 6 | root1/child2/subchild2 |

SQLFIDDLE

Надявам се това да помогне....



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматично увеличаване на varchar в MySQL

  2. Кой йерархичен модел трябва да използвам? Съседство, вложени или изброени?

  3. Опитвам се да направя LOAD DATA INFILE с REPLACE и AUTO_INCREMENT

  4. Проверка на стойност в масив в една SQL заявка с клауза WHERE

  5. MySQL групово вмъкване от CSV файлове с данни