sql >> データベース >  >> RDS >> Mysql

このようなテーブルから階層を取得する

    このストアドプロシージャを試してください

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

    クエリ1

    call updatePath(10)
    

    SQL FIDDLE

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

    これがお役に立てば幸いです



    1. エラー1148:使用されたコマンドはこのMySQLバージョンでは許可されていません

    2. SQL30日より古いすべてのレコードを取得します

    3. Symfony3-SQLSTATE[HY000][2002]そのようなファイルまたはディレクトリはありません

    4. PostgreSQLエラー:関数to_tsvector(文字が変化します、不明)が存在しません