论坛首页 综合技术论坛

一条SQL查回整棵树

浏览 5859 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-11-02  
DROP TABLE IF EXISTS tree;
/*
tree_level表示树的等级,使用两位表示一级(两位一般可以满足应用,如果不够,你可以使用3位或4位表示一级)
示例: 01为一级,则01的下一级节点为0101,0102,01XX,三级则表示为0101XX,
*/

CREATE TABLE tree (
	id int(11) NOT NULL auto_increment,
	tree_level varchar(11) default NULL,
	PRIMARY KEY (id)
);


--测试数据
INSERT INTO tree VALUES (1, '01');
INSERT INTO tree VALUES (2, '0101');
INSERT INTO tree VALUES (3, '0102');
INSERT INTO tree VALUES (4, '010101');
INSERT INTO tree VALUES (5, '010102');
INSERT INTO tree VALUES (6, '02');
INSERT INTO tree VALUES (7, '0201');
INSERT INTO tree VALUES (8, '0202');
INSERT INTO tree VALUES (9, '020101');
INSERT INTO tree VALUES (10,'020102');
INSERT INTO tree VALUES (11,'020201');


--查找01的所有子节点
select * from tree where tree_level like '01%';

--查找'010101' 的所有父节点
select * from tree where '010101' like concat(tree_level,'%');

性能问题?,你的树一般不会很深吧,使用两位也是考虑一般足够使用,加上索引,应该不差
   发表时间:2006-11-03  
限制比较多,比如一层最多99个,最多10层什么的,
0 请登录后投票
   发表时间:2006-11-03  
想起了Nested-Set Model,就是太麻烦了,修改结构要好几条sql语句.不知道大家在实际项目中经常用到么?普通的保存父ID的做法似乎用的最多.(记得在谁的blog上还看到篇批Nested-Set Model的文章,说是无比愚蠢的设计...)
0 请登录后投票
   发表时间:2006-11-03  
这结构

排序,转移父级分类。。。都很麻烦
0 请登录后投票
   发表时间:2006-11-03  
用递归SQL啊~
0 请登录后投票
   发表时间:2006-11-03  
你封装一下处理的方法,还是比较简单的

引用
限制比较多,比如一层最多99个,最多10层什么的,

本来就说明了"两位一般可以满足应用,如果不够,你可以使用3位或4位表示一级",如果想要无限分级,那还是使用parent_id吧

引用
用递归SQL啊~

我的意思是创建树及查询树的另一种写法
0 请登录后投票
   发表时间:2006-11-03  
这种问题...使用这种方式有其优缺点。
参考我以前写的数型结构帖子。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics