페이지 목록이있는 테이블이 있고 일부는 상위 페이지가 있습니다. 이 페이지는 매우 임의의 순서로되어 있습니다. Page_Order에 의해 정렬 된 모든 페이지를 선택하기 위해 재귀 조인 문을 만들어야합니다. 여기서 부모는 각각 그 뒤에 자식 페이지가 나열됩니다.
표 : 페이지
Page_ID | Page_Name | Page_Parent | Page_Order
1 | User | 2 | 2
2 | Admin | NULL | 2
3 | Pages | 2 | 1
4 | Home | NULL | 1
5 | About | NULL | 3
6 | Contact | 5 | 1
다음 순서로 선택하고 싶습니다 (상위 페이지를 순서대로 정렬하고 그 뒤에 하위 페이지를 순서대로 지정).
Page_ID | Page_Name | Page_Parent | Page_Order
4 | Home | NULL | 1
2 | Admin | NULL | 2
3 | Pages | 2 | 1
1 | User | 2 | 2
5 | About | NULL | 3
6 | Contact | 5 | 1
구체적으로 요청한 것은 아니지만 원하는 것을 달성하는 방법이 있습니다. 이것은 당신에게 제한된 수의 자식 페이지를 제한하고 재귀 적이 지 않습니다.
; WITH cte AS (
SELECT 1 Page_Id, 'User' Page_Name, 2 Page_Parent, 2 Page_Order union
SELECT 2, 'Admin ', NULL, 2 union
SELECT 3, 'Pages ', 2 , 1 union
SELECT 4, 'Home ', NULL, 1 union
SELECT 5, 'About ', NULL, 3 union
SELECT 6, 'Contact ', 5 , 1
)
SELECT Page_Id, Page_Name, Page_Parent, Page_order, x = CAST(Page_order AS DECIMAL(18,2))
FROM cte
WHERE Page_Parent IS NULL
UNION
SELECT child.Page_Id, child.Page_Name, child.Page_Parent, child.Page_order, X = CAST(parent.Page_order AS DECIMAL(18,2)) + ISNULL(CAST(child.Page_order AS DECIMAL(18,2))/10000, 0)
FROM cte parent
LEFT OUTER JOIN cte child
ON child.Page_Parent = parent.Page_Id
WHERE child.Page_Id IS NOT NULL
ORDER BY x
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다