利用MySQL排序将树结构表数据封装成树结构对象
来源:互联网 发布:mac怎么卸载软件 编辑:程序博客网 时间:2024/06/01 23:45
本人菜鸟一个,望大家多多指教
需求:将具备树结构的线性表遍历出来,得到树形结构的对象
解决思路:
- 要不查询整条记录,要不查询具备树结构的部分数据。再通过具备树结构的部分数据,将整条记录封装到对象中
- 怎么查询具备树结构的部分数据
- 首先确定部分数据,我选择记录的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;//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;
0 0
- 利用MySQL排序将树结构表数据封装成树结构对象
- 利用MySQL排序将树结构表数据封装成树结构对象(二)
- 利用MySQL排序将树结构表数据封装成树结构对象(三)
- 利用树型结构进行排序
- 利用Map把一维数据转换成树结构
- 数据封装---结构体
- JAVA代码实现多级树结构封装对象
- 利用运算符重载将结构体排序--uva11729
- 利用fastjson将map数据封装到对象中
- 数据库中树结构数据,转换为Java对象树结构( 多叉树结构 )
- 数据库中树结构数据,转换为Java对象树结构( 多叉树结构 )
- 数据库中树结构数据,转换为Java对象树结构( 多叉树结构 )
- mysql 复制表结构、数据
- 利用结果集元数据将查询对象封装成map
- mysql 父子结构排序
- 利用php获取MySql表结构
- 用Python将mysql库表结构导成excel
- PL/SQL 表结构(不要表数据,只要表结构)导出成一个.sql文件///怎么将oracle的sql文件转换成mysql的sql文件)
- IOS缓存机制详解
- mvc 数据验证金钱格式decimal格式验证
- Insertion Sort List
- Cocos2dx 3.10音频无法正常播放问题的解决之路
- 控制面板有u盘显示,可是计算机不显示u盘符
- 利用MySQL排序将树结构表数据封装成树结构对象
- 小知识点
- 图片夜增强研究
- 语义化软件版本号管理
- Hbase rowkey 设计原则
- EditText每四位自动添加空格或者横线(银行卡输入格式,验券格式)
- DevExpress实现为TextEdit设置水印文字的方法
- QT(mingw32)配置QWT
- java UDP编程