mysql로 메뉴를 구성 중입니다.
예를 들어 1차 메뉴에 해당하는 2차 메뉴가 있고, 2차 메뉴에 해당하는 3차 메뉴가 있습니다.
ex)
메뉴1
- 메뉴2
- 메뉴3
메뉴1
- 메뉴2
- 메뉴2
이런 식으로요!
현재 테이블의 컬럼 구성은
id / parent_id / menu_level / ordering / menu_name이 있습니다. (불필요 컬럼 삭제)
select * from manager_menu order by ( case when parent_id is null then id else parent_id end ), menu_level ;
id | parent_id | menu_level | menu_code | menu_name | ordering | url | uri | |
1 | 1 | null | 1 | test1 | 메뉴1 | 1 | ||
2 | 2 | 1 | 2 | test2 | 메뉴1-2 | 1 | ||
3 | 3 | 1 | 2 | test2 | 메뉴1-2 | 2 | ||
4 | 4 | 2 | 3 | test3 | 메뉴1-3 | 1 | ||
5 | 5 | 2 | 3 | test3 | 메뉴1-3 | 2 | ||
6 | 6 | null | 1 | test11 | 메뉴2 | 3 | ||
7 | 7 | 6 | 2 | test22 | 메뉴2-2 | 1 | ||
8 | 8 | 6 | 2 | test22 | 메뉴2-2 | 2 | ||
9 | 9 | 6 | 2 | test22 | 메뉴2-2 | 3 | ||
10 | 10 | 7 | 3 | test33 | 메뉴2-3 | 1 | ||
11 | 11 | 9 | 3 | test33 | 메뉴2-3 | 1 | ||
12 | 12 | null | 1 | test111 | 메뉴32 | 2 | ||
13 | 13 | 12 | 2 | test222 | 메뉴3-2 | 1 | ||
14 | 14 | 13 | 3 | test333 | 메뉴3-3 | 1 |
select 문으로 조회를 했을 때 결과인데, 문제는 메뉴1 (parent_id가 null인 것) 끼리의 ordering 순서가 정렬이 되지 않는 것입니다.
저 조회문에서 메뉴1의 ordering 까지 정렬 하려면 쿼리를 어떻게 수정해야 할 지 감이 안잡힙니다 ㅜㅜ
도와주시면 감사하겠습니다....
계층(tree)을 풀때 단순 sql문장으로 order by 해서는 정렬이 안되구요.
반드시 connect by 절을 사용해야 됩니다.
...
앗 mysql 이군요.
음~~ 그럼 with절을 통해서 connect by처럼 재귀적 호출하는 방법으로 풀어야 겠네요.
mssql 에서는 with절을 통한 재귀적 호출이 됐었는데.. mysql도 되겠죠? ㅋㅋ
connect by 절로 열심히 sql을 작성하느라 시간을 소비 했네요.
지금은 어렵고.. 시간 되는데로.. 해 볼게요.
질문자님도 'with절 통한 재귀적 호출하는 방법' 으로 googling하면 나올거에요.
함 도전해보세요.