1、函数
xr_test.tb_content替换成自己的表
CREATE DEFINER=`root`@`%` FUNCTION `get_related_ids`(start_id BIGINT) RETURNS varchar(1000) CHARSET utf8mb4 COLLATE utf8mb4_general_ci
DETERMINISTIC
BEGIN
DECLARE result_ids VARCHAR(1000);
-- 使用递归 CTE 查找所有相关的 id
WITH RECURSIVE related_nodes AS (
-- 初始查询:从起始节点开始
SELECT id
FROM xr_test.tb_content
WHERE id = start_id AND is_deleted = 0
UNION ALL
-- 递归部分:查找子节点
SELECT u.id
FROM xr_test.tb_content u
JOIN related_nodes rn ON u.parent_id = rn.id
WHERE u.is_deleted = 0
)
-- 将查询结果的 id 用逗号连接起来
SELECT GROUP_CONCAT(id)
INTO result_ids
FROM related_nodes;
RETURN result_ids;
END
2、调用
-- 调用函数,传入起始节点的 id
SELECT get_related_ids(1892822043159773186) ids;