mariadb 按字母顺序但根据父级排序

jchrr9hc  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(188)

给定下面的类别表,是否有一种方法可以按字母顺序返回名称,但在父项下包含带有parent_id的名称?
| 识别码|父标识|姓名|
| - -|- -|- -|
| 一个|空值|硬件|
| 2个|空值|软件|
| 三个|空值|网络|
| 四个|一个|台式机|
| 五个|一个|打印机|
| 六个|一个|笔记型电脑|
| 七个|2个|办公室|
| 八个|2个| windows |
| 九个|2个|其他|
| 10个|三个|停机|
| 十一|三个|防火墙|
| 十二|空值|账户|
| 十三|十二|新增账户|
| 十四|十二|重设密码|
这个查询使用PHP,所以我总是可以通过php代码来组织它们,但它让我想到是否有一种方法可以直接在查询中完成这一操作。我在如何处理这个问题上还是一片空白。这个特定的例子只涉及到一个层次的子对象,所以目前我可以使用处理这个问题的解决方案。但是有没有一种方法也可以允许多个层次的子对象呢?
例如,如果我只提取父类别(parent_id为空的行)并按名称排序,我将有“帐户”、“硬件”、“软件”和“网络”。但我希望有:
| 识别码|父标识|姓名|
| - -|- -|- -|
| 十二|空值|账户|
| 十三|十二|新增账户|
| 十四|十二|重设密码|
| 一个|空值|硬件|
| 四个|一个|台式机|
| 六个|一个|笔记型电脑|
| 五个|一个|打印机|
| 三个|空值|网络|
| 十一|三个|防火墙|
| 10个|三个|停机|
| 2个|空值|软件|
| 七个|2个|办公室|
| 九个|2个|其他|
| 八个|2个| windows |

eivnm1vs

eivnm1vs1#

我终于想出了一个解决方案,比我预期的要简单得多。这将对我的例子起作用,但不会考虑多个层次的深度。

SELECT p.id, p.parent_id, p.cat_name, COALESCE(c.cat_name, p.cat_name) as g
FROM category p
LEFT JOIN category c
ON p.parent_id = c.id
ORDER BY g, parent_id, cat_name

为了说明那些父母可能是孩子本身的孩子,我还没有一个解决方案,但我觉得答案在于使用WITH RECURSIVE

相关问题