문제

나는 동적 데이터 사이트 (놀랍도록 강력한)에 들어가서 그것을 즐기고 있습니다. 그러나 나는 만날 수없는 것 같다. 계층 적 범주 구조를 만들기위한 자체 조정 카테고리 테이블 (ID, Name, ParentID)이 있습니다 (예 : NULL ID가있는 범주는 최상위 레벨, 일반적인 종류입니다). 그런 다음 카테고리에 대한 외국 키가있는 제품 테이블이 있습니다.

동적 데이터 사이트 내에 카테고리 드롭 다운 목록이 자동으로 생성되었습니다. 그러나 모든 범주를 숫자 순서로 나열합니다. 내가 원하는 것 (그리고 이전에 코딩 한 내용, 예비 자국 데이터)은 계층 적으로 배열 된 카테고리 목록입니다.

기존 FilteruserControl을 교체합니까? PopulateListControl 메소드를 어디서나 무시할 수 있습니까? 자체 조정 계층 데이터 추출에 대한 LINQ 구문이있는 사람이 있습니까?

포인터와 조언 만하면 도움을 주셔서 감사합니다.

친절한 안부,

Mike Kingscott

도움이 되었습니까?

해결책

오라클에서 :

SELECT  LEVEL, Id, Name, LPAD(' ', LEVEL) || Name AS IndentedName
FROM    Categories
START WITH
        ParentID IS NULL
CONNECT BY
        ParentID = PRIOR Id
ORDER SIBLINGS BY
        Name

당신은 사용할 수 있습니다 IndentedName 또는 귀하에게 사용자 정의 서식을 기준으로합니다 LEVEL 의사 콜럼 (각 범주의 깊이를 보여줍니다)

추신 : a bad 사용하려는 아이디어 NULL 인덱스를 사용하여 액세스 할 수 없으므로 상위 상위 ID로. a 0 대신에.

업데이트:

~ 안에 SQL Server:

WITH    q (id, parentid, name, level, bc) AS
        (
        SELECT  id, parentid, name, 1, CAST(ROW_NUMBER() OVER (ORDER BY name) AS VARCHAR(MAX))
        FROM    Categories
        WHERE   ParentID IS NULL
        UNION ALL
        SELECT  c.id, c.parentid, c.name, q.level + 1, q.bc + '.' + CAST(ROW_NUMBER() OVER (ORDER BY c.name) AS VARCHAR(MAX))
        FROM    q
        JOIN    Categories c
        ON      c.parentId = q.id
        )
SELECT  *
FROM    q
ORDER BY
        bc

같지 않은 Oracle, SQL Server 인덱스 NULL 값이므로 a를 사용할 수 있습니다 NULL 궁극적 인 조상을 표시합니다.

다른 팁

SQL Server에는 계층 적 데이터 유형이 있습니다. 그것을 사용하지 않았지만 흥미로워 보입니다. http://msdn.microsoft.com/en-us/magazine/cc794278.aspx.

이 상황에서 자주 사용하는 것은 왼쪽 오른쪽 나무입니다. 이들은 데이터를 쿼리하는 데 효율적입니다. 가장 중요한 것은 나무를로드하고 지속시키기위한 특정 층이 있습니다. 이것은 DB에서 모든 어린이들을 잡고 트리를 기억에 넣습니다. 레이어는 또한 트리 내에서 노드를 움직이고 노드를 삭제하는 데 도움이됩니다. 메모리로 트리를 구성한 후에는 거기에서 모든 것을 할 수 있습니다. 도움이되기를 바랍니다. 일반적인 왼쪽/오른쪽 트리의 코드 샘플을 원한다면 알려주십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top