`
badqiu
  • 浏览: 673812 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

一条SQL查回整棵树

阅读更多
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,'%');

性能问题?,你的树一般不会很深吧,使用两位也是考虑一般足够使用,加上索引,应该不差
分享到:
评论
6 楼 LucasLee 2006-11-03  
这种问题...使用这种方式有其优缺点。
参考我以前写的数型结构帖子。
5 楼 badqiu 2006-11-03  
你封装一下处理的方法,还是比较简单的

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

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

引用
用递归SQL啊~

我的意思是创建树及查询树的另一种写法
4 楼 whycloud 2006-11-03  
用递归SQL啊~
3 楼 叶子 2006-11-03  
这结构

排序,转移父级分类。。。都很麻烦
2 楼 yfmine 2006-11-03  
想起了Nested-Set Model,就是太麻烦了,修改结构要好几条sql语句.不知道大家在实际项目中经常用到么?普通的保存父ID的做法似乎用的最多.(记得在谁的blog上还看到篇批Nested-Set Model的文章,说是无比愚蠢的设计...)
1 楼 chensimiao@gmail.com 2006-11-03  
限制比较多,比如一层最多99个,最多10层什么的,

相关推荐

    Oracle SQL树形结构查询

    这种查询方式利用`START WITH...CONNECT BY PRIOR`子句来实现递归,使得我们可以从数据库中检索出整棵或多棵树的结构。 `START WITH`子句用于指定树的起点,即查询的初始条件。例如,在描述中的例子中,如果我们要...

    一个项目涉及到的50个Sql语句(整理版).txt

    - 在 SQL 语句中,使用 `--` 来添加单行注释,解释每条语句的功能。 ### 5. SQL 实践案例 文件中的 SQL 语句展示了如何通过 SQL 对实际问题进行建模和解决。例如: - 如何创建数据库表。 - 如何插入数据到表中。 -...

    mysql索引与sql调优

    - 主键索引是一棵B+树,叶子节点包含完整的行记录。 - B+树保证了高度平衡,提高了查询效率。 - 叶子节点之间通过双向链表连接,方便范围查询。 - **第二索引(Secondary Index)**: - 也是B+树结构,但叶子节点...

    oracle prior

    条件 2 是连接条件,其中用 PRIOR 表示上一条记录,例如 CONNECT BY PRIOR org_id = parent_id 就是说上一条记录的 org_id 是本条记录的 parent_id,即本记录的父亲是上一条记录。条件 3 是过滤条件,用于对返回的...

    SQLSERVER 2005中使用sql语句对xml文件和其数据的进行操作(很全面)

    –用SQL多条可以将多条数据组成一棵XML树L一次插入 –将XML树作为varchar参数传入用 –insert xx select xxx from openxml() 的语法插入数据 ———————————–导入,导出xml————————– –1导入实例 ...

    基于SQL Server的交叉销售空间数据挖掘探讨.pdf

    每个决策树代表一个推荐模型,可以为每一部电影创建一个决策树,最多可创建255棵。在SQL Server 2005中,数据挖掘算法都有一个专门的内容查看器,用于展示算法所发现的模式。例如,文章展示了预测电影《Jaws》的决策...

    Oracle的Connect By使用示例

    - **结果**:清晰地展示了以ID为1的记录为根节点的整棵树的层级关系。 4. **构建路径表达式**: ```sql SELECT LTRIM(SYS_CONNECT_BY_PATH(ID, '-'), '-') AS PATH, ID, NAME, LEVEL FROM TBL_TEST START WITH...

    北交冯凤娟老师数据结构习题答案

    10. **普里姆(Prim)算法构造最小生成树**:用于寻找加权图的最小生成树,每次选取当前未加入树中的边中权重最小的一条连接一个未被包含的顶点,直至所有顶点连成一棵树。 掌握这些知识点不仅有助于理解和解决数据...

    connect_by_prior_递归算法

    这种方式可以用来获取树结构的一部分,而不是整棵树。 #### 八、使用 LEVEL 关键字 `LEVEL`关键字可以用来标记每行数据所在的层级,从根节点开始计算。这对于分析树结构非常有用。 #### 九、节点和分支的裁剪 ...

    数据库索引

    聚集索引是按照表的主键构建的一棵B+树,其中叶子节点包含了整个表的行记录数据。这表明数据本身就是索引的一部分,也就是说表中的数据行按照索引的顺序存储。在大多数情况下,查询优化器倾向于使用聚集索引,因为它...

    mysql基础架构教程之查询语句执行的流程详解

    在MySQL数据库中,执行一条SQL查询语句涉及多个步骤。首先,我们从连接器开始。当你输入`mysql -h $ip -u $username -p $password`来连接数据库时,连接器负责处理客户端与MySQL服务器之间的连接,包括身份验证和...

    大厂面试系列二.pdf

    二分图是图论中的概念,它的所有顶点可以分成两个互不相交的子集,图中的每一条边连接的两个顶点分别属于这两个不同的顶点集。 判断两棵树是否相等,需要遍历两棵树,并比较对应的节点值是否相等。如果两棵树的结构...

    JavaFX TreeView数据库加载Node的实例

    TreeView由多个TreeItem组成,每个TreeItem可以有自己的子节点,形成一棵树。在JavaFX中,我们可以通过创建TreeItem对象并设置其值来创建节点。如果一个TreeItem有子节点,我们可以使用`setChildren()`方法添加它们...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS(Information Manage-mentSystem)是其典型代表。 2. 网状结构模型:按照网状数据结构建立的数据库系统称为网状数据库系统,其典型代表是DBTG...

    全国计算机三级考试数据库.pdf

    19. 数据仓库是一种更小、更集中的仓库,它为公司提供了分析商业数据的一条廉价途径。 20. 霍夫曼算法是求具有最小带权外部路径长度的扩充二叉树的算法。 此外,还有许多其他的数据库系统相关的知识点,如查询语言...

Global site tag (gtag.js) - Google Analytics