当前位置: 移动技术网 > IT编程>数据库>Mysql > mysql 树表查询所有子节点

mysql 树表查询所有子节点

2020年07月30日  | 移动技术网IT编程  | 我要评论

前言

  • 使用 find_in_set 函数可以实现该功能

表结构

  • 假设有部门表如下:
CREATE TABLE IF NOT EXISTS `sys_dept` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门id',
  `parent_id` bigint(20) DEFAULT '0' COMMENT '父部门id',
  `ancestors` varchar(50) DEFAULT '' COMMENT '祖级列表',
  `name` varchar(30) DEFAULT '' COMMENT '部门名称',
  `order_num` int(4) DEFAULT '0' COMMENT '显示顺序',
  `leader` varchar(20) DEFAULT NULL COMMENT '负责人',
  `phone` varchar(11) DEFAULT NULL COMMENT '联系电话',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  `status` char(1) DEFAULT '0' COMMENT '部门状态(0正常 1停用)',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
  `create_userid` bigint(20)  DEFAULT NULL COMMENT '创建者,user表id',
  `create_username` varchar(64) DEFAULT '' COMMENT '创建者,user表name,冗余',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_userid` bigint(20)  DEFAULT NULL COMMENT '更新者,user表id',
  `update_username` varchar(64) DEFAULT '' COMMENT '更新者,user表name,冗余',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='部门表' AUTO_INCREMENT=105 ;

数据示例

INSERT INTO `sys_dept` 
(`id`, `parent_id`, `ancestors`, `name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`) 
VALUES
(100, 0, '0', 'xx公司', 0, '张三', '15888888888', 'xxx@xx.com', '0', '0'),
(101, 100, '0,100', '财务部', 1, NULL, NULL, NULL, '0', '0'),
(102, 100, '0,100', '办公室', 2, NULL, NULL, NULL, '0', '0'),
(103, 100, '0,100', '销售1部', 3, NULL, NULL, NULL, '0', '0'),
(104, 103, '0,100,103', '销售1部1科', 1, NULL, NULL, NULL, '0', '0');

查询id=100的部门的所有子部门

select * 
from `sys_dept` 
where FIND_IN_SET('100',ancestors)

运行结果
在这里插入图片描述

查询id=103的部门的子部门

select * 
from `sys_dept` 
where FIND_IN_SET('103',ancestors)

运行结果
在这里插入图片描述

参考

https://www.cnblogs.com/xiaoxi/p/5889486.html

本文地址:https://blog.csdn.net/sayyy/article/details/107637892

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网