• 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;


    总结:

            通过这几天的观察。我们发现,集体的智慧永远是最强大的,每一个人贡献一点点,我们就能将问题的解决方式在设计之初就升级到一个客观的程度,包含这次的树形结构的研究。相信你的队友不论他在你心理究竟是什么状态,他既然被招进公司。肯定有他的闪光点打动了人力部门。且另一句话。高手在民间。这句话。已经多次被验证了。

  • 相关阅读:
    ASP.NET ValidationGroup 属性和CssClass 属性
    sql 在将 nvarchar 值 转换成数据类型 int 时失败。
    select 1 from table
    OLEDB和ODBC的区别
    ASP.NET 读数据库绑定到 TreeView 递归方式
    用python做网页抓取与解析入门笔记[zz]
    win8.1安装驱动出现“文件的哈希值不在指定的目录”的解决办法[zz]
    Linux磁盘IO监控[zz]
    硬盘内部硬件结构和工作原理详解[zz]
    fcitx五笔的安装[zz]
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6862648.html
Copyright © 2020-2023  润新知