1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > MySQL存储过程 树状结构数据查询

MySQL存储过程 树状结构数据查询

时间:2022-06-09 11:44:19

相关推荐

MySQL存储过程 树状结构数据查询

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))BEGINSET 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 DOIF result != '' THENSET result = concat(result,',',@sTempChd);ELSESET result = @sTempChd;END IF;PREPARE stmt FROM @sqlcmd; EXECUTE stmt; END WHILE;select result;END

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))BEGINSET 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 != '' THENSET result = concat(result,',',@sTempPar);ELSESET result = @sTempPar;END IF;PREPARE stmt FROM @sqlcmd; EXECUTE stmt; END WHILE;select result;END

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。