Mysql根据某层部门ID查询所有下级多层子部门
模拟表和数据脚本
复制以下sql语句生成一个叫sys_dept的表和插入若干构造好的有层级关系的数据,直接复制执行就ok
DROP TABLE IF EXISTS `sys_dept`; CREATE TABLE `sys_dept` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 部门编号, `p_id` int(11) DEFAULT NULL COMMENT 父级部门编号, `title` varchar(255) DEFAULT NULL COMMENT 父级部门名称, `is_open` int(11) DEFAULT NULL COMMENT 是否展开(0-展开,1-不展开), `address` varchar(255) DEFAULT NULL COMMENT 部门地址, `create_time` datetime DEFAULT NULL COMMENT 创建时间, `remark` varchar(255) DEFAULT NULL COMMENT 备注, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO sys_dept (p_id,title,is_open,address,create_time,remark) VALUES (0,总经办,1,深圳,2019-04-10 14:06:32.000,大BOSS) ,(1,销售部,0,武汉,2019-04-10 14:06:32.000,程序员屌丝) ,(1,运营部,0,武汉,2019-04-10 14:06:32.000,无) ,(1,生产部,0,武汉,2019-04-10 14:06:32.000,无) ,(2,销售一部,0,武汉,2019-04-10 14:06:32.000,销售一部) ,(2,销售二部,0,武汉,2019-04-10 14:06:32.000,销售二部) ,(2,销售三部,0,广州,2019-04-10 14:06:32.000,销售三部) ,(2,销售四部,0,广州,2019-04-10 14:06:32.000,销售四部) ,(2,销售五部,0,广州,2019-04-10 14:06:32.000,销售五部) ,(3,运营一部,0,武汉,2019-04-10 14:06:32.000,运营一部) ,(3,运营二部,0,武汉,2019-04-10 14:06:32.000,运营二部) ,(3,运营三部,0,武汉,2019-04-10 14:06:32.000,运营三部) ,(3,运营四部,0,武汉,2019-04-10 14:06:32.000,运营四部) ,(3,运营五部,0,武汉,2019-04-10 14:06:32.000,运营五部) ,(4,生产一部,1,深圳,2019-11-23 09:50:23.000,生产一部) ,(4,生产二部,1,深圳,2019-11-23 09:50:23.000,生产二部) ,(4,生产三部,1,深圳,2019-11-23 09:50:23.000,生产三部) ,(5,销售一部一组,1,深圳,2019-11-23 09:50:23.000,销售一部一组) ,(5,销售一部二组,1,深圳,2019-11-23 09:50:23.000,销售一部二组) ,(5,销售一部三组,1,深圳,2019-11-23 09:50:23.000,销售一部三组) ,(6,销售二部一组,1,深圳,2019-11-23 09:50:23.000,销售二部一组) ,(6,销售二部二组,1,深圳,2019-11-23 09:50:23.000,销售二部二组) ,(17,生产三部一组,1,深圳,2019-11-23 09:50:23.000,生产三部一组) ,(17,生产三部二组,1,深圳,2019-11-23 09:50:23.000,生产三部二组) ,(17,生产三部三组,1,深圳,2019-11-23 09:50:23.000,生产三部三组) ;
根据部门ID查询所有子部门
select id,title from ( select t1.id,t1.title, if(find_in_set(p_id, @pids) > 0, @pids := concat(@pids, ,, id), 0) as ischild from ( select id, p_id, title from ssmdemo.sys_dept t order by p_id, id ) t1, ( select @pids := 17) t2 ) t3 where ischild != 0
其中@pids := 17的17就是要查询的部门ID
