MySQL获取所有子节点
背景说明
需求:MySQL
树形结构,根据指定的节点,获取其下属的所有子节点(包含路径上的枝干节点和叶子节点);
枝干节点:如果一个节点下还有子节点,则为枝干节点;
叶子节点:如果一个节点下不再有子节点,则为叶子节点。
问题分析
直接自定义MySQL
函数getChildList
,通过一层while循环,实现对指定节点的所有子节点进行查询。
功能实现
数据表结构
要保证我们的数据表中要有id和parent_id,即数据id和父节点id
编写查询叶子节点函数 getChildList
1 | CREATE DEFINER=`root`@`localhost` FUNCTION `getChildList`(`nodeId` int) RETURNS varchar(1000) CHARSET utf8 |
其中,用到了几个MySQL
的系统函数,如:CAST
, CONCAT
, GROUP_CONCAT
, FIND_IN_SET
调用函数
1 | select getChildList(1) as childList |