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

Jak najít cestu hierarchie pro reprezentaci stromu

Můžete použít uloženou proceduru, jak jste zmínili ve své otázce, protože vnoření může být až 7 úrovní hluboké.

Uložená procedura

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//

Pro kontrolu skutečného záznamu jsme právě vytiskli prosté záznamy s hodnotou null ve sloupci cesty

select * from foo

Výsledky :

| 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) |

Volání procedury :

call updatepath

Výsledek po provedení procedury :

select * from foo

Výsledky :

| 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

Doufám, že to pomůže....



  1. Jak nainstalovat ovladač Mysql JDBC do studia Android

  2. Jak se připojím k PostgreSQL bez zadání názvu databáze?

  3. Jak se připojit k MySQL a Postgres v živém materializovaném zobrazení

  4. MySQL:ignorovat chyby při importu?