0

假设我有下表

ID 分类名称 parent_id
1 电影 0
2 技术 0
3 科幻小说 1
4 浪漫的 1
5 纪录片 0
6 空间 3
7 英雄 3
8 土星 6
9 火星 6
10 黑洞 6

我想要的是以每个父母都跟着他的孩子这样的方式订购这些物品:

ID 分类名称 parent_id
1 电影 0
3 科幻小说 1
6 空间 3
8 土星 6
9 火星 6
7 英雄 3
4 浪漫的 1
2 技术 0
5 纪录片 0
10 黑洞 6

如何编写查询来执行这样的操作?

4

2 回答 2

2

MariaDB 10.2 支持递归 CTE 表达式。你标记了你的问题所以我认为如果你想继续使用 MariaDB,你必须升级。

如果您可以以不同的方式存储数据,则可以使用在 MySQL 或 MariaDB 支持递归 CTE 表达式之前流行的存储分层数据的替代方法之一。有关这方面的一些建议,请参阅:

于 2022-01-12T23:26:13.500 回答
1

我认为递归 CTE 是您最好的选择,正如 @Dale K 所建议的那样。我认为我在这里汇总的递归 CTE 非常接近您想要的。让我知道你的想法:

WITH RECURSIVE cte_stuff AS (
    (SELECT      
        id, 
        category_name,
        parent_id,
       CAST(category_name AS VARCHAR(5000)) as hierarchy
    FROM       
        stuff st
    WHERE parent_id = 0)
    UNION ALL
    SELECT 
        s.id,
        s.category_name,
        s.parent_id,
        CAST(CONCAT(ss.hierarchy,'->',s.category_name) AS VARCHAR(5000)) AS Hierarchy
    FROM 
        stuff s
        JOIN cte_stuff ss 
            ON ss.id = s.parent_id
)
SELECT * FROM cte_stuff ORDER by hierarchy

结果如下所示:

在此处输入图像描述

你可以在这里看到我的 dbfiddle:https ://dbfiddle.uk/?rdbms=mariadb_10.6&fiddle=b5c0b669f0bc611bda576502967170ee

于 2022-01-12T23:36:31.463 回答