mysql查出树结构的所有子节点

tree结构表

CREATE TABLE `model_struc` (
  `ID` varchar(36) NOT NULL COMMENT ID,
  `name` varchar(50) DEFAULT NULL COMMENT 名称,
  `morder` varchar(255) DEFAULT NULL COMMENT 排序,
  `pid` varchar(36) DEFAULT NULL COMMENT 父菜单ID,
  `iconid` varchar(32) DEFAULT NULL COMMENT 图标ID,
  `create_by` varchar(32) DEFAULT NULL COMMENT 创建人id,
  `create_name` varchar(32) DEFAULT NULL COMMENT 创建人,
  `update_by` varchar(32) DEFAULT NULL COMMENT 修改人id,
  `update_date` datetime DEFAULT NULL COMMENT 修改时间,
  `create_date` datetime DEFAULT NULL COMMENT 创建时间,
  `update_name` varchar(32) DEFAULT NULL COMMENT 修改人,
  `icode` varchar(32) DEFAULT NULL COMMENT 模型代码,
  `version` varchar(32) DEFAULT NULL COMMENT 版本,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=模型结构;

查询函数: 这个函数只需要改一下表明,还有pid的名字成你的即可复用

CREATE DEFINER=`fkgl`@`%` FUNCTION `getChildLst`(rootId varchar(36)) RETURNS varchar(1000) CHARSET utf8
BEGIN
DECLARE sTemp VARCHAR(1000);
DECLARE sTempChd VARCHAR(1000);
SET sTemp=$;
SET sTempChd=cast(rootId AS CHAR);
WHILE sTempChd IS NOT NULL DO
SET sTemp=concat(sTemp,,,sTempChd);
SELECT group_concat(id) INTO sTempChd
FROM
	model_struc
WHERE
   FIND_IN_SET(pid, sTempChd) > 0;

END
WHILE;
RETURN sTemp;
END

我的树,POS模型是根节点,他的id是1dffsdad

使用方法: getChildLst(‘你的id’)里传入的是根节点id,也可以是父节点id,如果是根节点就查出根下面所有的子节点,父节点的id就查出该父节点下面的所有子节点

select * from model_struc where FIND_IN_SET(id, getChildLst(1dffsdad))

查出来的结果是:

经验分享 程序员 微信小程序 职场和发展