欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql 树表查询所有子节点

程序员文章站 2022-03-11 16:49:31
前言使用 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 '祖级列表', `na...

前言

  • 使用 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)

运行结果
mysql 树表查询所有子节点

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

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

运行结果
mysql 树表查询所有子节点

参考

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

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

相关标签: mysql