2013-05-03 2 views
0

mssql.I의 계층 적 카테고리 정렬에 관한 문제가 있습니다. 다음 코드 세그먼트에서 해당 레벨의 카테고리가 나열된 sql 코드가 있습니다.subCategory의 ID를 사용하는 계층 적 카테고리 정렬

WITH TempCtgry (CtgryID, CtgryName, ParentCtgryId, Lvl)AS (SELECT CategoryID,CategoryName ,ParentCatID, 0 as Level FROM Category r WHERE r.ParentCatID IS NULL UNION ALL SELECT r1.CategoryID, r1.CategoryName, r1.ParentCatID, TempCtgry.Lvl+1 FROM Category r1 INNER JOIN TempCtgry on r1.ParentCatID= TempCtgry.CtgryID) SELECT * FROM TempCtgry

하지만 표시 할 하위 카테고리의 parents.For 예 : 텔레비전 >> 스마트 >> 액정 TV에 내가 그렇게 할 수있는 방법

?

감사합니다. 킹 감사합니다. 당신이 가서

답변

1

단지 계산 수준처럼, 그것을 구축 : 웹 페이지의 링크, 당신은 디스플레이의 범주 이름과 해당 IDS 모두를 갖고 싶어 하겠지만

WITH TempCtgry (CtgryID, CtgryName, ParentCtgryId, Lvl) AS (
    SELECT CategoryID, CategoryName, ParentCatID, 0 as Level, 
    Convert(VarChar(1024), CategoryName) as Path 
    FROM Category r 
    WHERE r.ParentCatID IS NULL 
    UNION ALL 
    SELECT r1.CategoryID, r1.CategoryName, r1.ParentCatID, TempCtgry.Lvl + 1, 
    Convert(VarChar(1024), Path + ' >> ' + r1.CategoryName) as Path 
    FROM Category r1 INNER JOIN 
     TempCtgry on r1.ParentCatID = TempCtgry.CtgryID 
) 
    SELECT * 
    FROM TempCtgry 

경로를 표시하려면 링크에서 사용하기 위해. 문자열 분리 함수를 사용할 수있는 간단한 구분 기호입니다 (예 :

WITH TempCtgry (CtgryID, CtgryName, ParentCtgryId, Lvl) AS (
    SELECT CategoryID, CategoryName, ParentCatID, 0 as Level, 
    Convert(VarChar(1024), CategoryName) as Path, 
    Convert(VarChar(1024), CategoryID) as PathIds 
    FROM Category r 
    WHERE r.ParentCatID IS NULL 
    UNION ALL 
    SELECT r1.CategoryID, r1.CategoryName, r1.ParentCatID, TempCtgry.Lvl + 1, 
    Convert(VarChar(1024), Path + '|' + r1.CategoryName) as Path, 
    Convert(VarChar(1024), PathIds + '|' + Convert(VarChar(9), CategoryId)) as PathIds 
    FROM Category r1 INNER JOIN 
     TempCtgry on r1.ParentCatID = TempCtgry.CtgryID 
) 
    SELECT * 
    FROM TempCtgry 

참고 : this는 디스플레이 코드를 단순화이 수직 막대 ("|")가 있다고 가정 범주 이름에서 발생할 수 없습니다.

ASP.NET 코드는 두 경로 문자열을 분리하여 함께 링크를 만들어내어 내려야합니다. 편리한 디스플레이 분리 기호는 "»"(U + 00BB : 오른쪽 - 포인팅 더블 앵글 따옴표)입니다.

모든 HTML 코드를 추가하여 쿼리에 필요한 HTML을 생성 할 수는 있지만 그것이 속한 곳이 아닙니다.

+0

어떻게 링크를 asp.net.It에 입력 할 수있는 좋은 일이지만 내가 asp.net 페이지에서 문자열을 제공하고 어떻게 경로 열의 각 cateogry에 대한 링크를 제공 할 수 있습니까? 감사합니다. –

+0

@ KaanKılıç - 건물 링크 용 카테고리 이름과 ID를 모두 처리하는 방법을 보여주는 답변이 업데이트되었습니다. – HABO

+0

고마워요. 좋은 대답에 대해 감사합니다. 저에게 도움이되었습니다. –

관련 문제