近期一直被树形结构整的非常头大,又是递归。又是循环。可是,好在我们在经历了千辛万苦后。最终弄出来了。事实上就是组织机构的常规操作,有些是我们过度设计。有些是我们想错了。而对数的逻辑读取,我们就属于想错了的类型。今天拿出来和大家分享。主要是树形结构在数据库的读取问题!

原始:

在最開始。我们对树的查询,肯定是从最简单的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积累——树形结构的操作的更多相关文章

  1. 026 hibernate操作树形结构

    树形结构:也就是目录结构,有父目录.子目录.文件等信息,而在程序中树形结构只是称为节点. 一棵树有一个根节点,而根节点也有一个或多个子节点,而一个子节点有且仅有一个父节点(当前除根节点外),而且也存在 ...

  2. C# EasyUI树形结构权限管理模块

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节和大家探讨下C#使用EasyUI树形结构/Tree构 ...

  3. YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计

    树形结构的排序在中国特色下十分普遍也非常重要,例如常说的五大班子,党委>人大>政府>政协>纪委,每个班子下还有部门,岗位,人员,最终排列的顺序通常需要按权力大小.重要性等进行排 ...

  4. Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结

    Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 ...

  5. jQuery+zTree加载树形结构菜单

    jQuery+zTree加载树形结构菜单 由于项目中需要设计树形菜单功能,经过一番捣腾之后,终于给弄出来了,所以便记下来,也算是学习zTree的一个总结吧. zTree的介绍: 1.zTree 是利用 ...

  6. Qt QTreeWidget 树形结构实现(转)

    Qt中实现树形结构可以使用QTreeWidget类,也可以使用QTreeView类,QTreeWidget继承自QTreeView类.树形效果如下图所示: 这是怎么实现的呢?还有点击节点时会有相应的事 ...

  7. [SQL Server]树形结构的创建

    对于SQL Server来说,构建显示一个树形结构不是一件容易的事情,逻辑构造能力不是它的强项.不过也不是说它没有能力干这个事情,只要换一种思维方式就可以理解它的工作原理. 例如,现在有一张表的内容如 ...

  8. 5JS树形结构菜单和jQuery版

    第一版JS版HTML: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  9. MVC3+EF4.1学习系列(十)----MVC+EF处理树形结构

    通过前几篇文章 我们处理了 一对一, 一对多,多对多关系 很好的发挥了ORM框架的做用 但是 少说了一种 树形结构的处理, 而这种树形关系 我们也经常遇到,常见的N级类别的处理, 以及经常有数据与类别 ...

随机推荐

  1. python爬虫入门一:爬虫基本原理

    1. 什么是爬虫 爬虫就是请求网站并提取数据的自动化程序 2. 爬虫的基本流程 1)发送请求 通过HTTP库向目标站点发送请求,即发送一个Request. 请求可以包含额外的headers等信息,等待 ...

  2. ERROR! The server quit without updating PID file (/usr/local/var/mysql/bogon.pid).

    本文转载自http://www.jb51.net/article/48625.htm 今天网站web页面提交内容到数据库,发现出错了,一直提交不了,数找了下原因,发现数据写不进去!第一反应,重启mys ...

  3. redis 内存管理与数据淘汰机制(转载)

    原文地址:http://www.jianshu.com/p/2f14bc570563?from=jiantop.com 最大内存设置 默认情况下,在32位OS中,Redis最大使用3GB的内存,在64 ...

  4. 关于JPA的理解

    JPA全称 Java Persistence API.JPA通过JDK5.0注解或者XML描述对象和关系表的映射关系,并将运行期的实体对象持久化到数据库中.持久化:即把数据(如内存中的对象)保存到可永 ...

  5. MFC中的CListControl控件

    一直想要这种效果,无奈刚开始用了cListbox控件,不知道怎么生成背景的边框,找了好久资料,突然发现好像控件用错了. 用CListControl控件实现图中效果,超级开心~ 实现过程: 添加一个Li ...

  6. Knockout v3.4.0 中文版教程-10-绑定-控制文本内容和外观-visible绑定

    4.绑定 1. 控制文本内容和外观 1. visible绑定 目的 visible绑定可以根据你传入绑定的值控制关联的DOM元素显示或隐藏. 例子 <div data-bind="vi ...

  7. hdu_2092_整数解

    枚举 #include <iostream> #include <cstdio> #include <cmath> using namespace std; int ...

  8. [JSOI2007] 祖玛 (区间DP)

    题目描述 这是一个流行在Jsoi的游戏,名称为祖玛. 精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏——这就是著名的祖玛游戏.祖玛游戏的主角是一只石青蛙,石青蛙会 ...

  9. Garbage First介绍

    本文摘自<构建高性能的大型分布式Java应用>一书,Garbage First简称G1,它的目标是要做到尽量减少GC所导致的应用暂停的时间,让应用达到准实时的效果,同时保持JVM堆空间的利 ...

  10. angularjs bootstrap 简介

    1.angular特色 数据双向绑定 模块化  var myapp=angular.module... 控制器  myapp.controller(){} 2.bootstrap特色 栅格结构  cs ...