zoukankan      html  css  js  c++  java
  • mysql递归

    1、向下递归

    delimiter $$ 
    drop function if exists get_child_list$$ 
    create function get_child_list(in_id varchar(100)) returns varchar(1000) 
    begin 
     declare ids varchar(1000) default ''; 
     declare tempids varchar(1000); 
     
     set tempids = in_id; 
     while tempids is not null do 
      set ids = CONCAT_WS(',',ids,tempids); 
      select GROUP_CONCAT(id) into tempids from 表名 where FIND_IN_SET(pid,tempids)>0;  
     end while; 
     return ids; 
    end  
    $$ 
    delimiter ;

    Eg:查询ID为4下面的所有节点SELECT * FROM t_areainfo WHERE FIND_IN_SET(id,get_child_list(节点ID));

    2.、向上递归

    DROP FUNCTION IF EXISTS queryChildrenAreaInfo1;DELIMITER;;
    CREATE FUNCTION queryChildrenAreaInfo1(areaId INT)
    RETURNS VARCHAR(4000)
    BEGIN
    DECLARE sTemp VARCHAR(4000);
    DECLARE sTempChd VARCHAR(4000);
    
    SET sTemp='$';
    SET sTempChd = CAST(areaId AS CHAR);
    SET sTemp = CONCAT(sTemp,',',sTempChd);
    
    SELECT parentId INTO sTempChd FROM t_areainfo WHERE id = sTempChd;
    WHILE sTempChd <> 0 DO
    SET sTemp = CONCAT(sTemp,',',sTempChd);
    SELECT parentId INTO sTempChd FROM t_areainfo WHERE id = sTempChd;
    END WHILE;
    RETURN sTemp;
    END;;DELIMITER ;

    Eg:查询ID7上面的所有节点SELECT * from t_areainfo where FIND_IN_SET(id,queryChildrenAreaInfo1(7));

  • 相关阅读:
    hdu 1166 敌军布阵
    UVA 100
    dfs和bfs 变形课
    hdu 1002 A + B Problem II
    连连看 杭电1175
    跳格子 DFS 加 奇偶截枝
    c语言 判断两直线段是否相交
    poj 3067 Japan
    数状数组
    UVA 10881 Piotr's Ants
  • 原文地址:https://www.cnblogs.com/ThisYbc/p/15064381.html
Copyright © 2011-2022 走看看