1、数据准备
CREATE TABLE `NODE_LIST` (
`ID` INT (11),
`NODE_CONTENT` VARCHAR (300),
`P_ID` INT (11)
);
INSERT INTO `NODE_LIST` (`ID`, `NODE_CONTENT`, `P_ID`) VALUES('1','A',NULL);
INSERT INTO `NODE_LIST` (`ID`, `NODE_CONTENT`, `P_ID`) VALUES('2','B','1');
INSERT INTO `NODE_LIST` (`ID`, `NODE_CONTENT`, `P_ID`) VALUES('3','C','1');
INSERT INTO `NODE_LIST` (`ID`, `NODE_CONTENT`, `P_ID`) VALUES('4','D','2');
INSERT INTO `NODE_LIST` (`ID`, `NODE_CONTENT`, `P_ID`) VALUES('5','E','3');
INSERT INTO `NODE_LIST` (`ID`, `NODE_CONTENT`, `P_ID`) VALUES('6','F','3');
INSERT INTO `NODE_LIST` (`ID`, `NODE_CONTENT`, `P_ID`) VALUES('7','G','5');
INSERT INTO `NODE_LIST` (`ID`, `NODE_CONTENT`, `P_ID`) VALUES('8','H','7');
INSERT INTO `NODE_LIST` (`ID`, `NODE_CONTENT`, `P_ID`) VALUES('9','I','8');
INSERT INTO `NODE_LIST` (`ID`, `NODE_CONTENT`, `P_ID`) VALUES('10','J','8');
2、函数创建
DROP FUNCTION IF EXISTS GET_CHILD_FUN;
CREATE FUNCTION GET_CHILD_FUN(ROOT_ID INT)
RETURNS VARCHAR(1000)
BEGIN
DECLARE P_TEMP VARCHAR(1000);
DECLARE C_TEMP VARCHAR(1000);
SET P_TEMP = '#';
SET C_TEMP =CAST(ROOT_ID AS CHAR);
WHILE C_TEMP IS NOT NULL DO
SET P_TEMP = CONCAT(P_TEMP,',',C_TEMP);
SELECT GROUP_CONCAT(ID) INTO C_TEMP FROM NODE_LIST
WHERE FIND_IN_SET(P_ID,C_TEMP)>0;
END WHILE;
RETURN P_TEMP;
END;
3、数据查询(根据父ID可以查询到所有子ID数据)
SELECT * FROM NODE_LIST WHERE FIND_IN_SET(id, GET_CHILD_FUN(3));
本文介绍了一种使用SQL函数GET_CHILD_FUN来查询树形结构数据的方法。通过创建自定义函数,能够递归地获取指定节点的所有子节点ID,实现树状数据的高效检索。示例展示了如何构建树形数据表,定义查询函数,并执行查询以获取特定父节点的子节点信息。
5246

被折叠的 条评论
为什么被折叠?



