1. 根据父级节点id查询其所有的子级节点id,查询结果中包含当前传入的父级节点id值
#根据传入的父级id查询所有子节点的id
#tableName 表名
#idKey 节点标识
#pIdKey 父节点标识
#pId 父节点id值
#调用示例 call get_child_nodes('org','id','pid',213,@result);
CREATE PROCEDURE `get_child_nodes`(IN `tableName` VARCHAR(100),IN `idKey` VARCHAR(50),IN `pIdKey` VARCHAR(50),IN `pId` VARCHAR(100),OUT `result` VARCHAR(10000))
BEGIN
SET result = '';
SET @sTempChd = pId;
SET @sqlcmd = CONCAT('SELECT group_concat(',idKey,') INTO @sTempChd FROM ',tableName,' where FIND_IN_SET(',pIdKey,',@sTempChd)>0;');
WHILE @sTempChd is not null DO
IF result != '' THEN
SET result = concat(result,',',@sTempChd);
ELSE
SET result = @sTempChd;
END IF;
PREPARE stmt FROM @sqlcmd;
EXECUTE stmt;
END WHILE;
select result;
END
————————————————
版权声明:本文为优快云博主「木鱼大叔」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/tdcqfyl/article/details/81942746
2. 根据当前节点id查询其所有的父级节点id,查询结果中包含当前传入的节点id值
#根据传入的节点id查询所有父节点的id
#tableName 表名
#idKey 节点标识
#pIdKey 父节点标识
#id 当前节点id值
#调用示例 call get_parent_nodes('org','id','pid',213,@result);
CREATE PROCEDURE `get_parent_nodes`(IN `tableName` VARCHAR(100),IN `idKey` VARCHAR(50),IN `pIdKey` VARCHAR(50),IN `id` VARCHAR(100),OUT `result` VARCHAR(10000))
BEGIN
SET result = '';
SET @sTempPar = id;
SET @sqlcmd = CONCAT('SELECT group_concat(',pIdKey,') INTO @sTempPar FROM ',tableName,' where ',pIdKey,'<>',idKey,' and FIND_IN_SET(',idKey,',@sTempPar)>0;');
#循环递归
WHILE @sTempPar is not null DO
#判断是否是第一个,不加的话第一个会为空
IF result != '' THEN
SET result = concat(result,',',@sTempPar);
ELSE
SET result = @sTempPar;
END IF;
PREPARE stmt FROM @sqlcmd;
EXECUTE stmt;
END WHILE;
select result;
END