zoukankan      html  css  js  c++  java
  • MySQL递归查询树状表的子节点、父节点

    表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段;

    如下mysql查询函数即可实现根据一个节点查询所有的子节点,根据一个子节点查询所有的父节点。对于数据量较大的时候(我这里测试的1万条左右)。查询效率非常慢。建议在java代码中进行处理。

    CREATE FUNCTION `getChildList`(rootId INT)
        RETURNS varchar(1000)
        BEGIN
          DECLARE sChildList VARCHAR(1000);
          DECLARE sChildTemp VARCHAR(1000);
          SET sChildTemp =cast(rootId as CHAR);
          WHILE sChildTemp is not null DO
            IF (sChildList is not null) THEN
              SET sChildList = concat(sChildList,',',sChildTemp);
        ELSE
          SET sChildList = concat(sChildTemp);
        END IF;
            SELECT group_concat(id) INTO sChildTemp FROM user_role where FIND_IN_SET(parentid,sChildTemp)>0;
          END WHILE;
          RETURN sChildList;
        END;
    /*获取子节点*/
    /*调用: 1、select getChildList(0) id; 
    2、select * 5From user_role where FIND_IN_SET(id, getChildList(2));
    */ CREATE FUNCTION `getParentList`(rootId INT) RETURNS varchar(1000) BEGIN DECLARE sParentList varchar(1000); DECLARE sParentTemp varchar(1000); SET sParentTemp =cast(rootId as CHAR); WHILE sParentTemp is not null DO IF (sParentList is not null) THEN SET sParentList = concat(sParentTemp,',',sParentList); ELSE SET sParentList = concat(sParentTemp); END IF; SELECT group_concat(parentid) INTO sParentTemp FROM user_role where FIND_IN_SET(id,sParentTemp)>0; END WHILE; RETURN sParentList; END; /*获取父节点*/ /*调用: 1、select getParentList(6) id;
    2、select * From user_role where FIND_IN_SET(id, getParentList(2));

    */
  • 相关阅读:
    NLTK学习笔记(三):NLTK的一些工具
    NLTK学习笔记(四):自然语言处理的一些算法研究
    NLTK学习笔记(五):分类和标注词汇
    深入C++的运算符重载
    python3实现TCP协议的简单服务器和客户端
    python3实现UDP协议的简单服务器和客户端
    Windows平台下python2和3的兼容问题解决
    异常处理
    内置方法
    反射:hasattr、getattr、setattr、delattr
  • 原文地址:https://www.cnblogs.com/franson-2016/p/6873233.html
Copyright © 2011-2022 走看看