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');

私のWebコンテンツテーブルは次のとおりです。

 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>)

これが 1 つのクエリで作成できるかどうか、または何らかの再帰関数が必要になるかどうかはわかりません。また、最後の / の後に何もない場合は、インデックス ページが必要であると想定します。

これは基本的に、小さな CMS のバックエンドになります。そのため、カテゴリに関連付けられた一意の名前で新しいページを作成できると考えました。私の場合は、部門になります。私は周りを見回しましたが、ASP Classic の CMS に関してはあまり選択肢がありません。

これはどのように達成できますか?コメントや提案も歓迎します。

ありがとうございました。

4

1 に答える 1

2

これと非常によく似たことを行いました (PHP/MySQL を除く) 。目の前にコードはありませんが、役立つと思われる場合は喜んで提供します。

私のアプローチの主な違いは、ネストされたセットを含む別のテーブルがなく、コンテンツと lft/rgt が 1 つのテーブルにまとめられていることだと思います。コンテンツ管理により、ユーザーは思い切った深さのコンテンツ階層を作成できるようになり、サイトは次のようになります。

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

...等々。

于 2010-06-24T00:40:31.137 に答える