mysql에서 계층형 구조를 재귀식으로 출력

계층형 구조

idx NAME parent
1 식품 0
2 의류 0
4 육류 1
5 가공육류 4
6 유제품 1
7 냉동육류 4
8 아이스크림 6
9 우유 6
10 간편식품 1

재귀식 출력

    WITH RECURSIVE re_category AS (
    SELECT idx, NAME, parent
    FROM test.category
    WHERE parent = 0
        UNION ALL
    SELECT sub_category.idx, sub_category.name, sub_category.parent
    FROM test.category sub_category
    INNER JOIN re_category par_category ON sub_category.parent = par_category.idx
    )
    SELECT idx, NAME, parent FROM re_category
    ORDER BY parent, idx;

카테고리를 나열하고 싶을 때는 출력내역에서 concat을 해 주면 보기 편하다.

    WITH RECURSIVE re_category AS (
    SELECT idx, NAME, parent
    FROM test.category
    WHERE parent = 0
        UNION ALL
    SELECT sub_category.idx, CONCAT(par_category.name,' > ',sub_category.name), sub_category.parent
    FROM test.category sub_category
    INNER JOIN re_category par_category ON sub_category.parent = par_category.idx
    )
    SELECT idx, NAME, parent FROM re_category
    ORDER BY NAME;