mysql 通过sql计算部门路径的方法

-- 创建部门表

CREATE TABLE department (

dept_id INT PRIMARY KEY AUTO_INCREMENT,

parent_id INT,

name VARCHAR(50)

);

-- 添加测试数据

INSERT INTO department (name, parent_id) VALUES ('公司', NULL), ('技术部', 1), ('市场部', 1), ('研发组', 2), ('产品组', 2), ('运营组', 3), ('客服组', 3);

-- 定义递归函数

DELIMITER $$

CREATE FUNCTION getDepartmentPaths(deptId INT) RETURNS TEXT BEGIN

DECLARE resultText TEXT DEFAULT ''; -- 保存结果文本

SELECT GROUP_CONCAT(name SEPARATOR ' > ') INTO resultText FROM department WHERE find_in_set(parent_id, @path := CONCAT(@path, ',', dept_id)) IS NOT NULL;

IF CHARACTER_LENGTH(resultText) = 0 THEN

SET resultText = '-';

END IF;

RETURN resultText;

END$$

DELIMITER ;

-- 调用递归函数获取部门路径

SELECT dept_id, getDepartmentPaths(dept_id) AS path FROM department ORDER BY dept_id ASC;

相关推荐
孪生质数-2 分钟前
MySQL主从延迟根因诊断法
数据库·mysql
bLEd RING20 分钟前
Redis 设置密码无效问题解决
数据库·redis·缓存
WiChP42 分钟前
【V0.1B5】从零开始的2D游戏引擎开发之路
java·服务器·数据库
75115892 小时前
笔记:postgresql如何下载驱动并安装?
数据库·postgresql
荒川之神2 小时前
拉链表概念与基本设计
java·开发语言·数据库
Highcharts.js2 小时前
适合报表系统的可视化图表|Highcharts支持直接导出PNG和PDF
javascript·数据库·react.js·pdf
刘~浪地球2 小时前
Redis 从入门到精通(一):简介、安装与配置
数据库·redis·缓存
APIshop2 小时前
Java获取京东商品详情接口(item_get)实战指南
java·linux·数据库
Bat U2 小时前
MySQL数据库|联合查询
数据库·mysql
BduL OWED3 小时前
mysql的主从配置
android·mysql·adb