--이전중입니다--/이전완료

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

heestory 2019. 9. 10. 23:00

계층형 구조

idx NAME parent
1 식품 0
2 의류 0
4 육류 1
5 가공육류 4
6 유제품 1
7 냉동육류 4
8 아이스크림 6
9 우유 6
10 간편식품 1
11 해물 1
12 여성의류 2
13 양념육 4
14 요거트 6
15 남성의류 2
16 젓갈 11
17 라면 10
18 아동의류 2
19 어류 11

재귀식 출력

    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
    ;