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

原始:

在最開始。我们对树的查询,肯定是从最简单的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. vfs_caches_init函数解析

    vfs_caches_init函数初始化VFS,下面梳理函数调用流程 start_kernel() -->vfs_caches_init_early(); -->dcache_init_e ...

  2. 菜鸟的《Linux程序设计》学习——MySQL数据库安装、配置及基本操作

    1. MySQL数据库: 在涉及到一些大型的Web系统或者嵌入式软件的开发时,都少不了用数据库来管理数据.在Windows操作系统下,使用过各种各样的数据库,如:sqlServer.Oracle.My ...

  3. cocos2d-x游戏开发(一)之环境搭建篇

    前言 进入研究生生涯已经有一段时间,感觉却没做些什么,实验室虽有一个很大的国家项目,但考虑到它这么的单一,总想利用业余时间做些什么,拓宽一下自己的知识面. 偶然机会,了解到cocos这个东东,恰好,实 ...

  4. HTML、CSS知识点总结_D

    一,html+css基础 1-1 Html和CSS的关系 学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的: 1. HTM ...

  5. spring junit4 单元测试运行正常,但是数据库并无变化

    解决方案 http://blog.csdn.net/molingduzun123/article/details/49383235 原因:Spring Juint为了不污染数据,对数据的删除和更新操作 ...

  6. OpennSSL之基本了解

    HTTPS是一种协议,等于HTTP+TLS(由于历史原因,SSL3.0之后就被TLS1.0替代了).openssl是一套开源工具集,主要有两个特性: 实现了ssl2,ssl3,TLSv1,TLSv1. ...

  7. python算法-队列

    一.队列的特征性: 1. 先进先出 9 8 7 6 5 4 3 2 1 0 last                                                           ...

  8. A Survey of Model Compression and Acceleration for Deep Neural Network时s

    A Survey of Model Compression and Acceleration for Deep Neural Network时s 本文全面概述了深度神经网络的压缩方法,主要可分为参数修 ...

  9. 【转】Python3学习笔记(urllib模块的使用)

    原文地址:https://www.cnblogs.com/Lands-ljk/p/5447127.html 1.基本方法 urllib.request.urlopen(url, data=None,  ...

  10. android项目引入第三方库工程出现的问题及解决方案

    一.导入libar库工程 1.使用第三方库工程libary,基本上都是从github上下载,解压后里面有个libary文件夹 2.将libary导入到eclipse中,步骤如下 1)在eclipse包 ...