美文网首页Java技术分享
Mysql查询带树状结构的信息

Mysql查询带树状结构的信息

作者: 不学无数的程序员 | 来源:发表于2019-01-22 13:31 被阅读0次

Mysql查询带树状结构的信息

在Oracle中有函数应用直接能够查询出树状的树状结构信息,例如有下面树状结构的组织成员架构,那么如果我们想查其中一个节点下的所有节点信息,在Oracle中可以直接用下面的语法可以进行直接查询。

START WITH CONNECT BY PRIOR

普遍公司的架构

但是在Mysql中是没有这个语法的,而如果你也是想要查询这样的数据结构信息该怎么做呢?我们可以自定义函数。我们将上面的信息初始化信息进数据库中。首先先创建一张表用于存储这些信息,ID为存储自身的ID信息,PARENT_ID存储父ID信息

CREATE TABLE `company_inf` (
  `ID` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `NAME` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `PARENT_ID` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL
)

然后将图中的信息初始化表中

INSERT INTO company_inf VALUES ('1','总经理王大麻子','1');
INSERT INTO company_inf VALUES ('2','研发部经理刘大瘸子','1');
INSERT INTO company_inf VALUES ('3','销售部经理马二愣子','1');
INSERT INTO company_inf VALUES ('4','财务部经理赵三驼子','1');
INSERT INTO company_inf VALUES ('5','秘书员工J','1');
INSERT INTO company_inf VALUES ('6','研发一组组长吴大棒槌','2');
INSERT INTO company_inf VALUES ('7','研发二组组长郑老六','2');
INSERT INTO company_inf VALUES ('8','销售人员G','3');
INSERT INTO company_inf VALUES ('9','销售人员H','3');
INSERT INTO company_inf VALUES ('10','财务人员I','4');
INSERT INTO company_inf VALUES ('11','开发人员A','6');
INSERT INTO company_inf VALUES ('12','开发人员B','6');
INSERT INTO company_inf VALUES ('13','开发人员C','6');
INSERT INTO company_inf VALUES ('14','开发人员D','7');
INSERT INTO company_inf VALUES ('15','开发人员E','7');
INSERT INTO company_inf VALUES ('16','开发人员F','7');

例如我们想要查询研发部门经理刘大瘸子下的所有员工,在Oracle中我们可以这样写

        SELECT *
        FROM T_PORTAL_AUTHORITY
        START WITH ID='1'
        CONNECT BY PRIOR ID = PARENT_ID

而在Mysql中我们需要下面这样自定义函数

CREATE FUNCTION getChild(parentId VARCHAR(1000))
RETURNS VARCHAR(1000)
BEGIN
    DECLARE oTemp VARCHAR(1000);
    DECLARE oTempChild VARCHAR(1000);
    SET oTemp = '';
    SET oTempChild =parentId;
    WHILE oTempChild is not null DO
        IF oTemp != '' THEN
            SET oTemp = concat(oTemp,',',oTempChild);
        ELSE
            SET oTemp = oTempChild;
        END IF;
        SELECT group_concat(ID) INTO oTempChild FROM company_inf where parentId<>ID and FIND_IN_SET(parent_id,oTempChild)>0;
    END WHILE;
RETURN oTemp;
END

然后这样查询即可

SELECT * FROM company_inf WHERE FIND_IN_SET(ID,getChild('2'));

此时查看查询出来的信息就是刘大瘸子下所有的员工信息了

image

相关文章

  • Mysql查询带树状结构的信息

    Mysql查询带树状结构的信息 在Oracle中有函数应用直接能够查询出树状的树状结构信息,例如有下面树状结构的组...

  • Java实现树状结构解析

    最近的工作有遇到此需求,如权限树状结构。因为数据库采用的MySQL,其在语义层面对于树状结构的查询支持偏弱。查询了...

  • oracle树形结构层级查询之start with ....co

    浅谈oracle树状结构层级查询 原文地址:浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查...

  • 三级联动地址树状数据

    //查询三级联动的地址信息树状结构--未应用 public static functiongetRegionAdd...

  • mysql php 如何查询无限层上下级关系树状结构

    mysql表结构如下 我们先来随机生成数据,以便测试。 那么如何查询出完整的上下关系树状结构图呢? 笨办法,无限递...

  • 高性能Mysql(3)-索引原理

    1.mysql索引类型 1.1B-树索引 (B-树就是所说的B树)使用树状结构存储数据库索引可以保证有序性而且查询...

  • 树状数组

    复习一下树状数组 树状数组 一种用于处理单点修改和区间查询的数据结构。树状数组C的定义: C[x] = Sum ...

  • Mysql常用语句

    1.查询数据库所有表信息: 2.查询数据库所有表字段结构: 3.查询数据库所有视图定义: 4.mysql常用函数:

  • 三种一维树状数组

    单点修改+区间查询 最基本的树状数组 树状数组入门 模板(洛谷P3374 【模板】树状数组1) 区间修改+单点查询...

  • 9月17-MySQL性能优化

    MySQL性能优化策略 1、MySQL内核架构 2、索引原理与查询优化 加速MySQL高效查询数据的数据结构 二分...

网友评论

    本文标题:Mysql查询带树状结构的信息

    本文链接:https://www.haomeiwen.com/subject/wiuljqtx.html