Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana menemukan jalur hierarki untuk representasi pohon

Anda dapat menggunakan prosedur tersimpan seperti yang telah Anda sebutkan dalam pertanyaan Anda karena sarangnya dapat mencapai kedalaman 7 level.

Prosedur Tersimpan

CREATE PROCEDURE updatePath()
BEGIN
declare cnt, n int;
    select count(*) into n from foo where parent_id is null;
    update foo a, foo b set a.path = b.name where b.parent_id is null and a.parent_id = b.id;
    select count(*) into cnt from foo where path is null;
    while cnt > n do
        update foo a, foo b set a.path = concat(b.path, '/', b.name) where b.path is not null and a.parent_id = b.id;
        select count(*) into cnt from foo where path is null;
    end while;
END//

Untuk memeriksa catatan yang sebenarnya, kami hanya mencetak catatan biasa yang memiliki nilai nol di kolom jalur

select * from foo

Hasil :

| ID |         NAME | PARENT_ID |   PATH |
------------------------------------------
|  1 |        root1 |    (null) | (null) |
|  2 |       child1 |         1 | (null) |
|  3 |    subchild1 |         2 | (null) |
|  4 |       child2 |         1 | (null) |
|  5 |       child3 |         1 | (null) |
|  6 |    subchild2 |         4 | (null) |
|  7 | subsubchild1 |         6 | (null) |

Memanggil prosedur :

call updatepath

Hasil setelah eksekusi prosedur :

select * from foo

Hasil :

| ID |         NAME | PARENT_ID |                   PATH |
----------------------------------------------------------
|  1 |        root1 |    (null) |                 (null) |
|  2 |       child1 |         1 |                  root1 |
|  3 |    subchild1 |         2 |           root1/child1 |
|  4 |       child2 |         1 |                  root1 |
|  5 |       child3 |         1 |                  root1 |
|  6 |    subchild2 |         4 |           root1/child2 |
|  7 | subsubchild1 |         6 | root1/child2/subchild2 |

SQLFIDDLE

Semoga membantu....



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hubungkan ke db MySQL jarak jauh dari wadah buruh pelabuhan

  2. MYSQL berbeda dalam Output dari skrip

  3. tidak dapat menyimpan data dari 1 tabel ke tabel lain

  4. Openshift:Bagaimana cara mengakses MySQL dari jarak jauh?

  5. Apa perbedaan antara utf8_unicode_ci dan utf8_unicode_520_ci