sql >> Database >  >> RDS >> Mysql

Hiërarchie ophalen uit een tabel als deze

Probeer deze opgeslagen procedure

CREATE PROCEDURE updatePath(in itemId int)
BEGIN
    DECLARE cnt int default 0;
    CREATE temporary table tmpTable 
    (
       `id` int, `name` varchar(15), `parent` int, path varchar(500)  
     )engine=memory select id, name, parent, name AS 'Path' from tbl where id = itemId;
    select parent into cnt from tmpTable;

    while cnt <> 0 do
       Update tmpTable tt, tbl t set tt.parent = t.parent, 
              tt.path = concat(t.name, ' > ', tt.path)
       WHERE tt.parent = t.id;
       select parent into cnt from tmpTable;
    end while;
    select * from tmpTable;
    drop table tmpTable;
END//

Query 1 :

call updatePath(10)

SQL FIDDLE :

| ID |            NAME | PARENT |                                                       PATH |
----------------------------------------------------------------------------------------------
| 10 | "Smear em meat" |      0 | "Kitchenware" > "Knives" > "Meat Knives" > "Smear em meat" |

Ik hoop dat dit helpt



  1. Enkele rijfuncties in Oracle sql

  2. Slaapstand - kon een verzameling rollen niet lui initialiseren:bonen.Language.patients, kon proxy niet initialiseren - geen sessie

  3. MySQL om ontbrekende datums in te vullen bij gebruik van GROUP BY DATE(table.timestamp) zonder lid te worden van een tijdelijke tabel

  4. Dichtstbijzijnde match, deel 1