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
##测试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