zoukankan      html  css  js  c++  java
  • mysql自定义function 写递归查询子节点

    #存储文本信息表
    CREATE TABLE WordInfoEntity(
        word_id VARCHAR(32) PRIMARY KEY NOT NULL,   # 主键ID UUID
        word_greda INT NOT NULL,               #等级: 0:正文文本  1234 等级
        word_name VARCHAR(100) NOT NULL,            #标题名                
        word_content VARCHAR(20000),             #内容:标题名+正文文本
        word_parentId VARCHAR(32) NOT NULL            #父级id (UUid)  
    );

    查子集合:向下递归(亲测能用)

    #自定义递归函数,用于查询传入id的所有子id
    DELIMITER //   # “//” 默认开头,必须以“//” 结尾  
    CREATE FUNCTION `getChildLst`(rootId VARCHAR(32))   #设置function参数类型
    RETURNS VARCHAR(1000) READS SQL DATA   #定义返回的数据类型
    BEGIN  #开始
      DECLARE sTemp VARCHAR(1000);   #定义全局变量,查询出来的id进行拼接
      DECLARE sTempChd VARCHAR(1000); #临时变量,用于循环查询的单次接收
      SET sTemp = '$';   # 设置初始值
      
      SET sTempChd =CAST(rootId AS CHAR);  #赋值,进行查询你
      #SET sTempChd =rootId ;  #赋值,进行查询你
      
      WHILE sTempChd IS NOT NULL DO  #此处为循环 为null结束循环
        SET sTemp = CONCAT(sTemp,',',sTempChd);    #将查询的所有子节点赋值为全局
         #GROUP_CONCAT(word_id) : 将查询出来的结果用逗号连接在一起
         # FIND_IN_SET(word_parentId,sTempChd)  效果 ==  word_parentId in (1,2,3,4....)
         
         #select * from treenodes where FIND_IN_SET(id,'1,2,3,4,5'); 
        #使用find_in_set函数一次返回多条记录 
        #id 是一个表的字段 然后每条记录分别是id等于1,234,5的时候 
        #有点类似in (集合) 
        #select * from treenodes where id in (1,2,3,4,5); 
        SELECT GROUP_CONCAT(word_id) INTO sTempChd FROM WordInfoEntity WHERE FIND_IN_SET(word_parentId,sTempChd);  #将查询出来的子id, 再次将子id当作父id进行查询
      END WHILE;
      RETURN sTemp;  #将最后结果返回出去
    END  //   # 结束,必须以“//” 结束
    DELIMITER ;

    查询语句:

    #传入父级id查询所有子级信息(function递归查询)
    SELECT * FROM WordInfoEntity WHERE FIND_IN_SET(word_id, getChildLst('eeee'));

    查父集合:向上递归(未亲测,未知是否能用)

    --drop FUNCTION `getParentList`  
    CREATE FUNCTION `getParentList`(rootId varchar(100))   
    RETURNS varchar(1000)   
    BEGIN   
    DECLARE fid varchar(100) default '';   
    DECLARE str varchar(1000) default rootId;   
      
    WHILE rootId is not null  do   
        SET fid =(SELECT parentid FROM treeNodes WHERE id = rootId);   
        IF fid is not null THEN   
            SET str = concat(str, ',', fid);   
            SET rootId = fid;   
        ELSE   
            SET rootId = fid;   
        END IF;   
    END WHILE;   
    return str;  
    END 

    查询语句:

    select getParentList('001001001001001');   
      
    select * from sbkfwh where FIND_IN_SET(id,getParentList('001001001001002'))  
  • 相关阅读:
    JSP错题纠错
    org.hibernate.NonUniqueObjectException: a different object with the same identifier value was alread---------程序报错
    SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
    Spring Mvc 的自定义拦截器
    管理系统-------------SSH框架书写登录和显示用户
    初识的Spring Mvc-----原理
    相识不易,要懂珍惜----------Spring Mvc
    我们的相识,总是那么巧。-------eclipse中搭建maven项目
    初识Web 服务(即Web Service)
    初识Spring框架
  • 原文地址:https://www.cnblogs.com/mh-study/p/9796140.html
Copyright © 2011-2022 走看看