浏览 5882 次
锁定老帖子 主题:一条SQL查回整棵树
精华帖 (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,'%'); 性能问题?,你的树一般不会很深吧,使用两位也是考虑一般足够使用,加上索引,应该不差 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-11-03
限制比较多,比如一层最多99个,最多10层什么的,
|
|
返回顶楼 | |
发表时间:2006-11-03
想起了Nested-Set Model,就是太麻烦了,修改结构要好几条sql语句.不知道大家在实际项目中经常用到么?普通的保存父ID的做法似乎用的最多.(记得在谁的blog上还看到篇批Nested-Set Model的文章,说是无比愚蠢的设计...)
|
|
返回顶楼 | |
发表时间:2006-11-03
这结构
排序,转移父级分类。。。都很麻烦 |
|
返回顶楼 | |
发表时间:2006-11-03
用递归SQL啊~
|
|
返回顶楼 | |
发表时间:2006-11-03
你封装一下处理的方法,还是比较简单的
引用 限制比较多,比如一层最多99个,最多10层什么的,
本来就说明了"两位一般可以满足应用,如果不够,你可以使用3位或4位表示一级",如果想要无限分级,那还是使用parent_id吧 引用 用递归SQL啊~
我的意思是创建树及查询树的另一种写法 |
|
返回顶楼 | |
发表时间:2006-11-03
这种问题...使用这种方式有其优缺点。
参考我以前写的数型结构帖子。 |
|
返回顶楼 | |