CREATE TABLE Area ([id] [int] NOT NULL,[name] [nvarchar] (50) NULL,[parent_id] [int] NULL,[type] [int] NULL );
comment_id | parent_id | author | comment |
1 | 0 | シャオミン | 私はあまり同意しません私はこの意見に同意しません |
2 | 1 | Xiao Zhang | 私も同意しません |
3 | 2 | Xiaohong | 私は上の階の人に同意します |
4 | 1 | Xiaoquan | なぜ同意しないのですか |
5 | 4 | Xiao Ming | 私は以前にもこの状況に遭遇したことがあります |
6 | 5 | シャオ・チャン | それはあなたの言ったことが正しいという意味ではありません |
7 | 5 | Xiaoxin | これは状況によります |
SELECT c1.*, c2.* FROM comments c1 LEFT OUTER JOIN comments c2 ON c2.parent_id = c1.comment_id;
comment_id | パス | 作成者 | コメント |
1 | 1 | シャオミン | 私はこの意見にはあまり同意しません |
2 | 1/2 | Xiao Zhang | 私も同意しません |
3 | 1/2/3 | Xiaohong | 上記に同意します |
4 | 1 /4 | 小全 | なぜ同意しないのですか |
5 | 1/4/5 | シャオミン | 私は以前にもこの状況に遭遇したことがあります |
6 | 1/4/5 /6 | Xiao Zhang | あなたの言っていることが正しいというわけではありません |
7 | 1/4/5/7 | Xiaoxin | それは状況次第です |
SELECT * FROM comments AS c WHERE '1/4/5/7' LIKE c.path || '%' ;
SELECT * FROM comemnts AS c WHERE c.path LIKE '1/4' || '%' ;
comment_id | nsleft | nsright | author | comment |
1 | 1 | 14 | 小明 | 我不大认同这个观点 |
2 | 2 | 5 | 小张 | 我也不认同 |
3 | 3 | 4 | 小红 | 我同意楼上 |
4 | 6 | 13 | 小全 | 你为什么不认同呢 |
5 | 7 | 12 | 小明 | 我以前遇到过这情况 |
6 | 8 | 9 | 小张 | 那也不代表你所说是对的 |
7 | 10 | 11 | 小新 | 这个视情况而定吧 |
SELECT c2.* FROM comments AS c1 JOIN comments AS c2 ON c2.nsleft BETWEEN c1.nsleftAND c1.nsright WHERE c1.comment_id = 4;
SELECT c2.* FROM comments AS c1 JOIN comments AS c2 ON c1.nsleft BETWEEN c2.nsleftAND c2.nsright WHERE c1.comment_id = 6;
SELECT parent.* FROM comments AS c JOIN comments AS parent ON c.nsleft BETWEEN parent.nsleft AND parent.nsrightLEFT OUTER JOIN comments AS in_between ON c.nsleft BETWEEN in_between.nsleft AND in_between.nsrightAND in_between.nsleft BETWEEN parent.nsleft AND parent.nsright WHERE c.comment_id = 6AND in_between.comment_id IS NULL;
祖先 | 后代 | 祖先 | 后代 | 祖先 | 后代 | 祖先 | 后代 |
1 | 1 | 1 | 7 | 4 | 6 | 7 | 7 |
1 | 2 | 2 | 2 | 4 | 7 | ||
1 | 3 | 2 | 3 | 5 | 5 | ||
1 | 4 | 3 | 3 | 5 | 6 | ||
1 | 5 | 4 | 4 | 5 | 7 | ||
1 | 6 | 4 | 5 | 6 | 6 |
INSERT INTO treepaths (ancestor, descendant)SELECT t.ancestor, 8FROM treepaths AS tWHERE t.descendant = 6UNION ALL SELECT 8, 8;
DELETE FROM treepaths WHERE descendant = 7;
方案 | 表数量 | 查询子 | 查询树 | 插入 | 删除 | 引用完整性 |
邻接表 | 1 | 简单 | 困难 | 简单 | 简单 | 是 |
枚举路径 | 1 | 简单 | 简单 | 简单 | 简单 | 否 |
嵌套集 | 1 | 困难 | 简单 | 困难 | 困难 | 否 |
闭包表 | 2 | 简单 | 简单 | 简单 | 简单 | 是 |
以上がデータベース テーブルの設計 - 隣接リスト、パス列挙、ネストされたセット、クロージャ テーブルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。