无法找到某个排序场景的解决方案

问题描述 投票:0回答:1

我有一个场景,我经常需要在定义工作流程订单定义的表中维护记录,以添加和删除将 ID 置于非交易订单中的阶段(事后无法更改 ID)。

我需要一种排序方式(或其他)方法来选择记录并显示它们将执行的顺序以轻松管理它们,但无法找到解决方案,尽管相信我会缺少一个明显的解决方案。 Parent_id 中的 NULL 是工作流程的开始。

简单记录示例:

id  strategy_id stage   parent_id
74  15  REMINDER_01 NULL
99  15  WARNING_06  74
76  15  WARNING_05  75
91  15  WARNING_08  76
78  15  WARNING_07  91
75  15  DEMAND_01   99

订单我需要他们返回以便轻松处理它们并查看订单:

id  strategy_id stage   parent_id
74  15  REMINDER_01 NULL
99  15  WARNING_06  74
75  15  DEMAND_01   99
76  15  WARNING_05  75
91  15  WARNING_08  76
78  15  WARNING_07  91

我尝试根据这个概念寻找解决方案,但相信我使用了错误的术语,因此没有得到任何匹配的内容。

mysql select sql-order-by
1个回答
0
投票

使用

recursive
方法和数据库来生成您的解决方案。我已使用
Postgres
和版本
16
来生成解决方案。

工作查询:

WITH RECURSIVE orderWorkflow AS (
  SELECT id, strategy_id, stage, parent_id, 0 AS level
  FROM mytable
  WHERE parent_id IS NULL

  UNION ALL

  SELECT t.id, t.strategy_id, t.stage, t.parent_id, wo.level + 1 AS level
  FROM mytable t
  INNER JOIN orderWorkflow wo ON t.parent_id = wo.id
)
SELECT id, strategy_id, stage, parent_id
FROM orderWorkflow
ORDER BY level, id;

工作演示:

https://dbfiddle.uk/kH-Qvx2V

© www.soinside.com 2019 - 2024. All rights reserved.