2010-06-17 5 views
1

내 중첩 세트 테이블은 다음과 같습니다.중첩 세트 모델이있는 데이터베이스에서 링크 웹 컨텐트를 어떻게 구합니까?

create table depts (
    id int identity(0, 1) primary key 
    , lft int 
    , rgt int 
    , name nvarchar(60) 
     , abbrv nvarchar(20) 
); 

시험 부서.

insert into depts (lft, rgt, name, abbrv) values (1, 14, 'root', 'r'); 
insert into depts (lft, rgt, name, abbrv) values (2, 3, 'department 1', 'd1'); 
insert into depts (lft, rgt, name, abbrv) values (4, 5, 'department 2', 'd2'); 
insert into depts (lft, rgt, name, abbrv) values (6, 13, 'department 3', 'd3'); 
insert into depts (lft, rgt, name, abbrv) values (7, 8, 'sub department 3.1', 'd3.1'); 
insert into depts (lft, rgt, name, abbrv) values (9, 12, 'sub department 3.2', 'd3.2'); 
insert into depts (lft, rgt, name, abbrv) values (10, 11, 'sub sub department 3.2.1', 'd3.2.1'); 

내 웹 콘텐츠 표는 다음과 같습니다.

create table content (
    id int identity(0, 1) 
    , dept_id int 
    , page_name nvarchar(60) 
    , content ntext 
); 

시험 내용.

insert into content (dept_id, page_name, content) 
values (3, 'index', '<h2>welcome to department 3!</h2>'); 
insert into content (dept_id, page_name, content) 
values (4, 'index', '<h2>welcome to department 3.1!</h2>'); 
insert into content (dept_id, page_name, content) 
values (6, 'index', '<h2>welcome to department 3.2.1!</h2>'); 
insert into content (dept_id, page_name, content) 
values (2, 'what-doing', '<h2>what is department 2 doing?/h2>'); 

주어진 URL을 기반으로 올바른 페이지 콘텐츠 (콘텐츠 테이블에서)를 쿼리하려고합니다. 루트 부서에서이 작업을 쉽게 수행 할 수 있습니다. 그러나 여러 개의 깊이가있는 부서를 쿼리하는 것이 조금 더 어려워졌습니다. 예를 들어 :

http://localhost/departments.asp?d3/ (Should return <h2>welcome to department 3!</h2>) 
http://localhost/departments.asp?d2/what-doing (Should return <h2>what is department 2 doing?</h2>) 

나는 어떤 종류의 재귀 함수가있을 필요가있는 경우이 한 쿼리에서 만들거나 할 수 있는지 확실하지 않습니다. 또한, 마지막/그 다음에 인덱스 페이지가 필요한 것으로 가정 한 후에 아무 것도없는 경우에도 마찬가지입니다.

기본적으로 이것은 작은 CMS의 백 엔드가됩니다. 그래서 내 생각에 당신은 카테고리와 관련된 고유 한 이름으로 새로운 페이지를 만들 수있었습니다. 제 경우에는 부서가 될 것입니다. 나는 주변을 둘러 보았고 ASP 클래식에 대한 CMS 측면에서 많은 선택권이 없다.

어떻게 수행 할 수 있습니까? 의견 및 제안도 환영합니다.

감사합니다.

답변

2

나는 매우 (PHP/MySQL 제외)과 비슷한 것을 만들었습니다. 나는 내 앞에 코드가 없지만 그것이 도움이된다고 생각한다면 기꺼이 그것을 제공 할 것이다 :

나는 나의 접근 방식의 주된 차이점은 내가 별개의 것이 없다고 생각한다. 중첩 세트가있는 테이블, 난 그냥 콘텐츠와 lft/rgt 함께 한 테이블에 함께했다. 컨텐츠 관리들은 감히로 사용자가 많은 깊이와 콘텐츠 계층 구조를 만들 수 있기 때문에 사이트처럼 뭔가를 끌 수 : 등등

http://site/tier1-page 
http://site/tier1-page/tier2-pageA 
http://site/tier1-page/tier2-pageB 
http://site/tier1-page/tier2-pageB/tier3-pageI 
http://site/tier1-page/tier2-pageB/tier3-pageII 

... 그리고.

+0

솔루션을 게시하면 크게 감사하겠습니다. – Mike

+0

트위터에 나를 때리고 뭔가를 보내 드리겠습니다. –

관련 문제