javaproject积累——树形结构的操作
近期一直被树形结构整的非常头大,又是递归。又是循环。可是,好在我们在经历了千辛万苦后。最终弄出来了。事实上就是组织机构的常规操作,有些是我们过度设计。有些是我们想错了。而对数的逻辑读取,我们就属于想错了的类型。今天拿出来和大家分享。主要是树形结构在数据库的读取问题!
原始:
在最開始。我们对树的查询,肯定是从最简单的select開始。我们如今回想一下:
定义:
表名:tb_tree
字段:id(主键),title(标题),parentId(父节点id)
举例:
1、查找树中的全部顶级父节点(辈份最长的人)。 如果这个树是个文件夹结构。那么第一个操作总是找出全部的顶级节点,再依据该节点找到其下属节点。
select * from tb_tree m where m.parent is null;
2、查找一个节点的直属子节点(全部儿子)。 假设查找的是直属子类节点。也是不用用到树型查询的。
select * from tb_tree m where m.parent=1;
递归:
简单介绍:
经过一段时间的维护,我们发现。当我们处理的逻辑复杂时,我们和数据库就会与多次交互。而这是不符合网络交互的现状的,我们还是希望,尽量通过一次交互。传递很多其它的信息,降低对带宽的压力。经过多方讨论,我们发现Oracle事实上已经做了这个工作,我们一起来看看:
我们经过不断的探索,发现oracle树查询的最重要的就是select…start with…connect by…prior语法了。依托于该语法,我们能够将一个表形结构以树的顺序列出来。
1、start with id= 是定义起始节点(种子)。能够是id也能够是root_id,定义为root_Id查询该节点下全部的树结构,定义为id(子节点)则查询指定的树
2、connect by prior :prior的含义为先前,前一条记录。prior id=root_id 也就是前一条记录的id等于当前记录的root_id(父id)
举例:
1、查找一个节点的全部直属子节点(全部后代)。
select * from tb_menu m start with m.id=1 connect by m.parent=prior m.id;
这个查找的是id为1的节点下的全部直属子类节点,包含子辈的和孙子辈的全部直属节点。
2、查找一个节点的直属父节点(父亲)。
假设查找的是节点的直属父节点。也是不用用到树型查询的。
--c-->child, p->parent
select c.id, c.title, p.id parent_id, p.title parent_title
from tb_menu c, tb_menu p
where c.parent=p.id and c.id=6
3、查找一个节点的全部直属父节点(祖宗)。
select * from tb_menu m start with m.id=38 connect by prior m.parent=m.id;
4、level字段为oracle特有的层级字段,能够通过level字段查询指定的层级
select root_id,id,name,level from t2 where level=1
start with root_id = 0
connect by prior id = root_id;
总结:
通过这几天的观察。我们发现,集体的智慧永远是最强大的,每一个人贡献一点点,我们就能将问题的解决方式在设计之初就升级到一个客观的程度,包含这次的树形结构的研究。相信你的队友不论他在你心理究竟是什么状态,他既然被招进公司。肯定有他的闪光点打动了人力部门。且另一句话。高手在民间。这句话。已经多次被验证了。
javaproject积累——树形结构的操作的更多相关文章
- 026 hibernate操作树形结构
树形结构:也就是目录结构,有父目录.子目录.文件等信息,而在程序中树形结构只是称为节点. 一棵树有一个根节点,而根节点也有一个或多个子节点,而一个子节点有且仅有一个父节点(当前除根节点外),而且也存在 ...
- C# EasyUI树形结构权限管理模块
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节和大家探讨下C#使用EasyUI树形结构/Tree构 ...
- YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计
树形结构的排序在中国特色下十分普遍也非常重要,例如常说的五大班子,党委>人大>政府>政协>纪委,每个班子下还有部门,岗位,人员,最终排列的顺序通常需要按权力大小.重要性等进行排 ...
- Atitit 常见的树形结构 红黑树 二叉树 B树 B+树 Trie树 attilax理解与总结
Atitit 常见的树形结构 红黑树 二叉树 B树 B+树 Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 ...
- jQuery+zTree加载树形结构菜单
jQuery+zTree加载树形结构菜单 由于项目中需要设计树形菜单功能,经过一番捣腾之后,终于给弄出来了,所以便记下来,也算是学习zTree的一个总结吧. zTree的介绍: 1.zTree 是利用 ...
- Qt QTreeWidget 树形结构实现(转)
Qt中实现树形结构可以使用QTreeWidget类,也可以使用QTreeView类,QTreeWidget继承自QTreeView类.树形效果如下图所示: 这是怎么实现的呢?还有点击节点时会有相应的事 ...
- [SQL Server]树形结构的创建
对于SQL Server来说,构建显示一个树形结构不是一件容易的事情,逻辑构造能力不是它的强项.不过也不是说它没有能力干这个事情,只要换一种思维方式就可以理解它的工作原理. 例如,现在有一张表的内容如 ...
- 5JS树形结构菜单和jQuery版
第一版JS版HTML: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...
- MVC3+EF4.1学习系列(十)----MVC+EF处理树形结构
通过前几篇文章 我们处理了 一对一, 一对多,多对多关系 很好的发挥了ORM框架的做用 但是 少说了一种 树形结构的处理, 而这种树形关系 我们也经常遇到,常见的N级类别的处理, 以及经常有数据与类别 ...
随机推荐
- Jquery 自定义动画同步进行如何实现?
需求描述:我需要对不懂的两个HTML对象进行操作,同时开始动画,同时结束动画. 遇到问题:如果先后对连个对象进行 animate动画,那么第一个会先运行,等第一个运行完了运行第二个,这样就不同步了. ...
- 爬取斗图网图片,使用xpath格式来匹配内容,对请求伪装成浏览器, Referer 防跨域请求
6.21自我总结 一.爬取斗图网 1.摘要 使用xpath匹配规则查找对应信息文件 将请求伪装成浏览器 Referer 防跨域请求 2.爬取代码 #导入模块 import requests #爬取网址 ...
- Lex与Yacc学习(六)之lex & yacc (简单计算器程序) 运行
词法分析程序ch3-01.l %{ #include "ch3-01.tab.h" extern int yylval; %} %% [0-9]+ { yylval = atoi( ...
- JavaScript正则表达式-反向引用
使用括号“()”进行分组,使子表达式(子模式)可以作为整体独立被修饰,子表达式所匹配的结果会被记录下来并可以单独被访问. /(a(b(cd){2})+)EF/ 则各引用分别对应: \1 对应(a(b ...
- PAT Basic 1071
1071 小赌怡情 常言道“小赌怡情”.这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注 t 个筹码后,计算机给出第二个数.若玩家猜对了,则 ...
- C# 反射总结
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...
- luogu1231 教辅的组成
注意把书拆成两份 #include <iostream> #include <cstring> #include <cstdio> #include <que ...
- 大数据学习——hive的sql练习题
ABC三个hive表 每个表中都只有一列int类型且列名相同,求三个表中互不重复的数 create table a(age int) row format delimited fields termi ...
- EasyUI 加载Tree
function LoadTree(result) { mainMenu = $('#mainMenu').tree({ url: "/ajax/GetTreeJson.ashx" ...
- BZOJ 3196 二逼平衡树 ——树套树
[题目分析] 全靠运气,卡空间. xjb试几次就过了. [代码] #include <cmath> #include <cstdio> #include <cstring ...