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 | path | author | comment |
1 | 1 | 샤오밍 | 저는 이 견해에 별로 동의하지 않습니다 |
2 | 1/2 | Xiao Zhang | 저도 동의하지 않습니다 |
3 | 1/2/3 | Xiaohong | 위 내용에 동의합니다 |
4 | 1 /4 | 작은전 | 동의하지 않으세요 |
5 | 1/4/5 | Xiao Ming | 저는 이런 상황을 겪은 적이 있습니다 |
6 | 1/4/5 /6 | 샤오장 | 네 말이 맞다는 건 아니야 |
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!