흔히 메뉴의 하위메뉴를 구성할 때
악세서리(Super Category) - 목걸이,팔찌,벨트,반지(Sub category)
상의(Super Category)- NONE(Sub category)
하의(Super Category) - NONE(Sub category)
신발(Super Category) - NONE(Sub category)
최상위 메뉴를 level 1 하위 메뉴를 level2 .....level n으로 구성합니다.
그러기 위해서는 우선 테이블을 구성할 때 필드 중에 자기 참조 필드가 있어야합니다.
예를 들어 최상위 메뉴의 코드 값이 100이면 하위 메뉴의 부모(상위 메뉴) 코드 값은 100이 되어야합니다.
즉 하나의 테이블 내에서 하위 메뉴 코드 값을 외래키로 하여 상위 메뉴 코드를 참조합니다.
이렇게 내부적으로 참조가 일어납니다.
여기서 각각 level을 부여하고 싶다면 필드에는 없지만 인위적으로 level값을 select하여
VO에 넣어줄 수 있습니다.
select와 level, start with, conect by prior로 구성하여 select문을 작성하면 됩니다.
말로 하면 어려우니 예시를 봅시다.
select level,cateName,cateCode,cateCodeRef
from jeongchan_category
start with cateCodeRef is null
connect by prior cateCode = cateCodeRef;
위 SQL문을 자세히 보시기 바랍니다.
우선 select로 테이블 필드와 level 필드를 뽑습니다.
start with를 통해 하위 카테고리가 참조하는 부모 카테고리의 코드 값이 null인 것
즉 상위 카테고리가 되겠죠??
왜냐하면 참조코드 값이 없다는 것은 자기자신 즉 상위 카테고리를 뜻합니다.
즉 상위 카테고리를 기준(level=1)으로 connect by prior를 통해 cateCode = cateCodeRef 인 것을
즉 상위 카테고리(level=1)의 하위카테고리들을 level=2로 부여하겠다는 뜻입니다.
결과는 아래와 같습니다.
악세서리 상위 카테고리에 level 1 부여
그 밑 하위 카테고리 4개에 level 2 부여
나머지 상의 하의 신발은 상위 카테고리로 level 1 부여
이러한 level 값들을 통해서 select 태그로 값을 판단할 수 있습니다.
'데이터베이스' 카테고리의 다른 글
ORA-00972: identifier is too long (0) | 2019.06.28 |
---|---|
Oracle 순위 뽑기 (0) | 2019.06.20 |