mysql 树操作函数,取子节点,取父节点

本文介绍两个SQL函数:一个用于获取指定根节点的所有子节点ID列表,另一个用于获取指定叶子节点的所有父节点ID列表。通过这两个函数,可以方便地进行树状结构数据的查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

取子节点

DROP FUNCTION IF EXISTS FUN_GET_CHILD_LIST;


CREATE FUNCTION FUN_GET_CHILD_LIST (ROOT_ID INT)
RETURNS varchar(1000)
BEGIN
DECLARE sTemp VARCHAR (1000) ;
DECLARE sTempChd VARCHAR (1000) ;
SET sTemp = '$' ;
SET sTempChd = CAST(ROOT_ID AS CHAR) ;
WHILE
sTempChd IS NOT NULL DO SET sTemp = CONCAT(sTemp, ',', sTempChd) ;
SELECT 
GROUP_CONCAT(id) INTO sTempChd 
FROM
uc_module 
WHERE FIND_IN_SET(parent_id, sTempChd) > 0 ;
END WHILE ;
RETURN sTemp ;
END;


select * from uc_module where FIND_IN_SET(id,FUN_GET_CHILD_LIST(1));

 

取父节点


DROP FUNCTION IF EXISTS FUN_GET_PARENT_LIST;


CREATE FUNCTION `FUN_GET_PARENT_LIST`(leafId varchar(20)) 
RETURNS varchar(1000) 
BEGIN 
DECLARE fid varchar(20) default ''; 
DECLARE str varchar(1000) default leafId; 
WHILE leafId is not null do 
SET fid =(SELECT parent_id FROM uc_module WHERE id = leafId); 
IF fid is not null THEN 
SET str = concat(str, ',', fid); 
SET leafId = fid; 
ELSE 
SET leafId = fid; 
END IF; 
END WHILE; 
return str; 
END

select*from uc_module where FIND_IN_SET(id,FUN_GET_PARENT_LIST(17));


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值