zoukankan      html  css  js  c++  java
  • MySQL递归查询父子节点

    1.表结构

    CREATE TABLE folder(
    
    id BIGINT(20) NOT NULL,
    
    parent_id BIGINT(20) DEFAULT NULL,
    
    PRIMARY KEY id
    
    );

    2.根据传入id查询所有子节点及其的id

    创建函数:

    CREATE FUNCTION `getParList`(rootId BIGINT)
    RETURNS varchar(1000) 
    BEGIN
        DECLARE sTemp VARCHAR(1000);
        DECLARE sTempPar VARCHAR(1000); 
        SET sTemp = ''; 
        SET sTempPar =rootId; 
     
        #循环递归
        WHILE sTempPar is not null DO 
            #判断是否是第一个,不加的话第一个会为空
            IF sTemp != '' THEN
                SET sTemp = concat(sTemp,',',sTempPar);
            ELSE
                SET sTemp = sTempPar;
            END IF;
            SET sTemp = concat(sTemp,',',sTempPar); 
            SELECT group_concat(parent_id) INTO sTempPar FROM folder where parent_id<>id and FIND_IN_SET(id,sTempPar)>0; 
        END WHILE; 
     
    RETURN sTemp; 
    END

    调用:

    select id
    from folder
    where FIND_IN_SET(id,getChildList(2))

    3.根据传入id查询所有父节点及其的id

    创建函数:

    CREATE FUNCTION `getChildList`(rootId BIGINT)
    RETURNS varchar(1000) 
     
    BEGIN
        DECLARE sTemp VARCHAR(1000);
        DECLARE sTempChd VARCHAR(1000);
     
        SET sTemp = '$';
        SET sTempChd =cast(rootId as CHAR);
     
        WHILE sTempChd is not null DO
            SET sTemp = concat(sTemp,',',sTempChd);
            SELECT group_concat(id) INTO sTempChd FROM  folder where FIND_IN_SET(parent_id,sTempChd)>0;
        END WHILE;
        RETURN sTemp; 
    END

    调用:

    select id
    from folder
    where FIND_IN_SET(id,getParList(10))









    This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法

     

    这是我们开启了bin-log, 我们就必须指定我们的函数是否是
    1 DETERMINISTIC 不确定的
    2 NO SQL 没有SQl语句,当然也不会修改数据
    3 READS SQL DATA 只是读取数据,当然也不会修改数据
    4 MODIFIES SQL DATA 要修改数据
    5 CONTAINS SQL 包含了SQL语句

    其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。


    在MySQL中创建函数时出现这种错误的解决方法:
    set global log_bin_trust_function_creators=TRUE;

  • 相关阅读:
    安卓5.1/7.1/8.1+wifi有叉问题解决
    历史市盈率查询
    IE9 Windows7 x64
    Error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory
    ubuntu kylin 13.10 无法安装ia32-libs解决方案
    ajax报错问题的解决
    关于 java swing 使用按钮关闭窗口
    关于在filter中获取WebApplicationContext的实践
    spring security
    毕设项目,系统搭建笔记文档
  • 原文地址:https://www.cnblogs.com/tianlong/p/12066839.html
Copyright © 2011-2022 走看看