Mysql树形结构函数查询
一 简介
对于具有上下级关系的业务场景或分销等场景,mysql数据库表结构满足 id , pid模式,可以使用mysql自定义函数快速实现根据id查询所有子类节点,或根据id查询所有父类节点.
二 简单demo
创建nodelist表
create table `nodelist` (
`id` int (11),
`nodecontent` varchar (300),
`pid` int (11)
);
insert into `nodelist` (`id`, `nodecontent`, `pid`) values('1','a',NULL);
insert into `nodelist` (`id`, `nodecontent`, `pid`) values('2','b','1');
insert into `nodelist` (`id`, `nodecontent`, `pid`) values('3','c','1');
insert into `nodelist` (`id`, `nodecontent`, `pid`) values('4','d','2');
insert into `nodelist` (`id`, `nodecontent`, `pid`) values('5','e','3');
insert into `nodelist` (`id`, `nodecontent`, `pid`) values('6','f','3');
insert into `nodelist` (`id`, `nodecontent`, `pid`) values('7','g','5');
insert into `nodelist` (`id`, `nodecontent`, `pid`) values('8','h','7');
insert into `nodelist` (`id`, `nodecontent`, `pid`) values('9','i','8');
insert into `nodelist` (`id`, `nodecontent`, `pid`) values('10','j','8');
三 自定义函数
根据id查询所有子节点数据 定义函数 getChild
根据id查询所有父节点数据 定义函数 getParent
四 sql用法
查询id是5的所有子节点数据
SELECT * FROM nodelist WHERE FIND_IN_SET(id, getChild(5));
查询id是10的所有父节点数据
SELECT * FROM nodelist WHERE FIND_IN_SET(id, getParent(10));