DELIMITER $$ 
USE `yoshop_pro`$$    ##库名
DROP FUNCTION IF EXISTS `getParents`$$
CREATE DEFINER=`root`@`%` FUNCTION `getParents`(self_Id VARCHAR(40)) 
RETURNS VARCHAR(1000) CHARSET utf8  ##定义返回值类型  varchar(4000)
BEGIN                    ##函数开始
    DECLARE sTemp text(40000);    ##定义一个varchar类型的参数
    DECLARE sTempChd text(40000);    ##定义一个varchar类型的参数
        DECLARE counts int;
    SET sTemp = "";            ##给sTmp赋值
    SET sTempChd =self_Id;
        set counts  =  0;
   WHILE sTempChd IS NOT NULL DO   ##循环体
            SET sTemp = CONCAT(sTempChd,",",sTemp);  
                ##拼接sTemp yoshop_dealer_user    层级表  user_id 用户id  referee_id 上级id()
            select count(*) INTO  counts   FROM yoshop_dealer_user   WHERE user_id = sTempChd;
                IF (counts=0)THEN  
                    set sTempChd = NULL ;
            else 
                SELECT referee_id INTO sTempChd  FROM yoshop_dealer_user   WHERE user_id = sTempChd;
            END IF;    
        ##根据父节点,查询出该父节点下的所有子节点的id,支持多级查询
        END WHILE;  
      RETURN left(sTemp,length(sTemp)-1);
END$$
DELIMITER ;

 ##测试 sql  1 不带条件

select t1.user_id,getParents(t1.user_id) as path from 
 yoshop_dealer_user t1 
left join 
 yoshop_dealer_user t2 
on t1.referee_id = t2.user_id

mysql 递归查询函数,无限极 分裂

##测试sql2 带条件

select t1.user_id,getParents(t1.user_id) as path from 
 yoshop_dealer_user t1 
left join 
 yoshop_dealer_user t2 
on t1.referee_id = t2.user_id
WHERE t1.user_id=11352

mysql 递归查询函数,无限极 分裂

相关文章: