안녕하세요.
메뉴 쿼리에 대해서 살펴 보기로 하겠습니다.
아래 구문은 MS-SQL 구문입니다.
WITH menu(Depth, PageID, PageTitle, ParentID, PageURL, PageDescription)
AS
(
SELECT 0 AS Depth, PageID, PageTitle, ParentID, PageURL, PageDescription
FROM MenuList
WHERE ParentID = 0
UNION ALL
SELECT Depth + 1, t.PageID, t.PageTitle, t.ParentID, t.PageURL, t.PageDescription
FROM MenuList
INNER JOIN menu c ON c.PageID = t.ParentID
)
SELECT convert(varchar, Depth) as Depth
, PageID
, PageTitle
, ParentID
, PageURL
, PageDescription
FROM menu
ORDER BY Depth, PageID
1. 괄호 안의 구문을 먼저 살펴 보겠습니다.
SELECT 0 AS Depth, PageID, PageTitle, ParentID, PageURL, PageDescription
FROM MenuList
WHERE ParentID = 0
메뉴 최상단을 가져오는 구문이죠.. 메뉴 테이블은 보통 PageID 와 ParentID 로 구성되어 있는데 ParentID 가 없는 메뉴는 최상단에 위치하게 됩니다.
이블로그의 Web 카테고리는 최상단 카테고리로 볼수 있습니다.
Union ALL
두개의 쿼리문을 하나로 합치는 구문이죠. 부모 밑에 자식 카테고리가 올수 있도록 넣어줍니다.
SELECT Depth + 1, t.PageID, t.PageTitle, t.ParentID, t.PageURL, t.PageDescription
FROM MenuList
INNER JOIN menu c ON c.PageID = t.ParentID
해당 구문을 싸고 있는 Menu와 비교하면서 부모를 찾습니다.
빈값이 아니라면 해당 쿼리를 재귀적으로 호출합니다.
SELECT convert(varchar, Depth) as Depth
, PageID
, PageTitle
, ParentID
, PageURL
, PageDescription
FROM menu
ORDER BY Depth, PageID
마지막으로 나타내고 싶은 순서대로 정렬을 합니다.
메모해 두면 언제든지 요긴하게 쓰일 메뉴 쿼리 입니다 .
감사합니다.
'프로그래밍 > Etc.' 카테고리의 다른 글
반응형 UI에서 IE 8 호완성 문제 (1) | 2017.10.17 |
---|---|
NotePad 빈칸을 Tab으로 변환하기 (0) | 2017.03.28 |
Excel Growth 함수 c# 구현 (0) | 2016.03.08 |
Excel Trend 함수 C# 구현로직 (0) | 2016.03.08 |
iis 상에서 piwik 설정 (설치형 로그분석기) (0) | 2016.02.15 |