美文网首页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查询带树状结构的信息

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