mysql - 给定mysql中的一些父ID,如何选择递归结构?
问题描述
我正在尝试获取给定多个 parent_id 的所有文件夹和后续子文件夹。数据库表的结构如下:
id name parent_id
1 Folder1 null
2 Folder2 null
3 Folder3 1
4 Folder4 1
5 Folder5 2
6 Folder6 2
7 Folder7 4
以下查询适用于单个 id,但我想避免执行多个查询。对于多个 id,例如 1 和 6,它应该返回行(1、3、4、7 和 6)。
SELECT id,
name,
parent_id
FROM
(SELECT *
FROM folder_categories
ORDER BY parent_id, id) categories_sorted,
(SELECT @pv := ?) initialisation
WHERE (FIND_IN_SET(parent_id, @pv)
AND @pv := CONCAT(@pv, ',', id))
OR id = ?
注意:问号可能是任何 id。
知道如何调整此查询以接受多个 id 吗?
编辑:我的 mysql 版本是 5.7,所以不幸的是 WITH RECURSIVE 不可用。
解决方案
对于多个 id,例如 1 和 6,它应该返回行(1、3、4、7 和 6)。
如果您可以使用 CTE (MySQL8),则以下查询将返回它们。
with recursive cte as
( select id, name, parent_id, id as top
from folder_categories
where id in (1,6)
union all select a.id, a.name, a.parent_id, b.top
from folder_categories a inner join cte b on a.parent_id=b.id)
select * from cte;
推荐阅读
- angularjs - 更新 intl-tel-input 插件不返回输入值
- python - 如何使用 matplotlib 创建多个饼图
- c - 我怎样才能从这个字符串中得到一个浮点值?C 编程
- r - R循环从FTP中提取CSV文件
- java - 在 Spring Boot 的非 bean 类中使用 @value
- php - 尝试添加用户可以看到的折扣
- python - 从 Android 上传文件时,flask-restful HTTP 500
- android - 如何在 RoomDatabase 中调用反向记录
- javascript - 在 render() 之前更新 var [React Native]
- kotlin - 了解 kotlin 中的内联类