mysql - 如何按照给定的方式在mysql中排序数据
问题描述
如何对此表行进行排序,以使下一行 pid 等于上一行 id
ID | 姓名 | PID |
---|---|---|
1 | 第 1 行 | 无效的 |
2 | 第 2 行 | 5 |
3 | 第 3 行 | 2 |
4 | 第 4 行 | 1 |
5 | 第 5 行 | 4 |
6 | 第 6 行 | 3 |
至
ID | 姓名 | PID |
---|---|---|
1 | 第 1 行 | 无效的 |
4 | 第 4 行 | 1 |
5 | 第 5 行 | 4 |
2 | 第 2 行 | 5 |
3 | 第 3 行 | 2 |
6 | 第 6 行 | 3 |
解决方案
WITH RECURSIVE
cte AS ( SELECT id, name, pid, 1 level
FROM table
WHERE pid IS NULL
UNION ALL
SELECT table.id, table.name, table.pid, cte.level + 1
FROM table
JOIN cte ON table.pid = cte.id )
SELECT id, name, pid
FROM cte
ORDER BY level
推荐阅读
- javascript - 使用 jquery 将所有表行替换为来自服务器的新数据
- typescript - 键入安全字段分配
- java - 无法使用 HLS 流运行 FFmpegFrameGrabber
- solr - 自定义请求处理程序不适用于 apache solr (v8) 中的 qt 参数
- docker - 是否可以使用不同的参数多次运行 docker 容器?
- sql-server - T-SQL - 插入 3.5M 行将事务日志大小增加到最大值
- c# - ajax调用成功后部分视图无法正确呈现
- vba - 在 Outlook 中使用日历约会来触发 VBA 宏
- unreal-engine4 - “结果变化”与“价值变化”
- php - Laravel 功能测试,但数据直到请求后才会出现