利用MySQL排序将树结构表数据封装成树结构对象
2016-05-24 10:38
429 查看
本人菜鸟一个,望大家多多指教
需求:将具备树结构的线性表遍历出来,得到树形结构的对象
解决思路:
要不查询整条记录,要不查询具备树结构的部分数据。再通过具备树结构的部分数据,将整条记录封装到对象中
怎么查询具备树结构的部分数据
首先确定部分数据,我选择记录的id
那么问题就变成怎么生成具备一定规则的id,又怎么通过规律的读取写入树对象
通过网上查看http://blog.csdn.net/ACMAIN_CHM/article/details/4142971,可以先通过排序生成一个完全展开的树结构,然后结合树的深度生成一个树的对象
![](https://img-blog.csdn.net/20160524102237199)
文章中让我最吃惊的地方是利用MySQL的排序规则来实现树的排序
那么MySQL的排序又是什么呢?我现在也不清楚
我这里只把握了一个规律就是,父节点的排序树一定在其所有子节点前面,而且它们是挨着的。假设父节点排序是A,那么它的子节点必定是A[?],根据MySQL的排序,A后面紧接着是A[?]
下面内容来自 http://blog.csdn.net/ACMAIN_CHM/article/details/4142971
方法三:利用中间表和过程
(本方法由yongyupost2000提供样子改编)
创建存储过程如下。由于MySQL中不允许在同一语句中对临时表多次引用,只以使用普通表tmpLst来实现了。当然你的程序中负责在用完后清除这个表。
执行完后会产生一个tmpLst表,nLevel 为节点深度,sCort 为排序字段。
使用方法
需求:将具备树结构的线性表遍历出来,得到树形结构的对象
解决思路:
要不查询整条记录,要不查询具备树结构的部分数据。再通过具备树结构的部分数据,将整条记录封装到对象中
怎么查询具备树结构的部分数据
首先确定部分数据,我选择记录的id
那么问题就变成怎么生成具备一定规则的id,又怎么通过规律的读取写入树对象
通过网上查看http://blog.csdn.net/ACMAIN_CHM/article/details/4142971,可以先通过排序生成一个完全展开的树结构,然后结合树的深度生成一个树的对象
文章中让我最吃惊的地方是利用MySQL的排序规则来实现树的排序
那么MySQL的排序又是什么呢?我现在也不清楚
我这里只把握了一个规律就是,父节点的排序树一定在其所有子节点前面,而且它们是挨着的。假设父节点排序是A,那么它的子节点必定是A[?],根据MySQL的排序,A后面紧接着是A[?]
下面内容来自 http://blog.csdn.net/ACMAIN_CHM/article/details/4142971
方法三:利用中间表和过程
(本方法由yongyupost2000提供样子改编)
创建存储过程如下。由于MySQL中不允许在同一语句中对临时表多次引用,只以使用普通表tmpLst来实现了。当然你的程序中负责在用完后清除这个表。
delimiter // drop PROCEDURE IF EXISTS showTreeNodes_yongyupost2000// CREATE PROCEDURE showTreeNodes_yongyupost2000 (IN rootid INT) BEGIN DECLARE Level int ; drop TABLE IF EXISTS tmpLst; CREATE TABLE tmpLst ( id int, nLevel int, sCort varchar(8000) ); Set Level=0 ; INSERT into tmpLst SELECT id,Level,ID FROM treeNodes WHERE PID=rootid; WHILE ROW_COUNT()>0 DO SET Level=Level+1 ; INSERT into tmpLst SELECT A.ID,Level,concat(B.sCort,A.ID) FROM treeNodes A,tmpLst B WHERE A.PID=B.ID AND B.nLevel=Level-1 ; END WHILE; END; // 4000 delimiter ; CALL showTreeNodes_yongyupost2000(0);
执行完后会产生一个tmpLst表,nLevel 为节点深度,sCort 为排序字段。
使用方法
SELECT concat(SPACE(B.nLevel*2),'+--',A.nodename) FROM treeNodes A,tmpLst B WHERE A.ID=B.ID ORDER BY B.sCort;
相关文章推荐
- 注册表的组织结构
- Ruby on Rails所构建的应用程序基本目录结构总结
- SQLSERVER的非聚集索引结构深度理解
- 调整SQLServer2000运行中数据库结构
- C#基础语法:结构和类区别详解
- 深入c# 类和结构的区别总结详解
- c#结构和类的相关介绍
- C#中结构(struct)的部分初始化和完全初始化实例分析
- C#中类与结构的区别实例分析
- C#枚举类型与结构类型实例解析
- javascript实现表现、结构、行为分离的选项卡效果!
- 实用的js 焦点图切换效果 结构行为相分离
- asp下生成目录树结构的类
- 深入解析C#编程中struct所定义的结构
- 浅谈Android系统的基本体系结构与内存管理优化
- Android编程入门之HelloWorld项目目录结构分析
- 一分钟掌握linux系统目录结构
- Go语言的Windows下环境配置以及简单的程序结构讲解
- thinkphp文件引用与分支结构用法实例
- php实现的树形结构数据存取类实例