2010-06-17 2 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. Поэтому я думал, что вы можете создавать новые страницы с уникальным именем, связанным с категорией. Что в моем случае было бы департаментами. Я огляделся и не так много вариантов с точки зрения CMS для ASP Classic.

Как это можно сделать? Комментарии и предложения также приветствуются.

спасибо.

ответ

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

ударил меня по щебетать или что-то еще, и я пришлю вам копию –