一尘不染

SQL嵌套顺序由?

sql

我敢肯定这已经被问过了,但是我不知道确切地称呼它是什么来找到答案。

我有一个类别和子类别的表格。他们每个人都有一个ID和一个父母ID。如果是顶级类别,则父ID为0。子类别的父ID设置为其父ID。

category_id          # The ID for this record
category_name        # The name of the category
parent_id            # The parent ID for this category
display_order        # Order of categories within their grouping

1 A  0 0     # First primary category
2 a1 1 0     # Subcategory, parent is A, display_order is 0
3 a2 1 1
4 a3 1 2

5 B  0 1     # Second primary category
6 b1 5 0     # Subcategory, parent is B, display_order is 0
7 b2 5 1
8 b3 5 2

我正在尝试编写一个SQL查询,该查询将按此顺序提供所有类别:

A,a1,a2,a3,B,b1,b2,b3

SELECT * FROM categories ORDER BY display_order

这在SQL中是可能的,还是我需要使用多个查询

谢谢布拉德


阅读 161

收藏
2021-03-10

共1个答案

一尘不染

这样的事情可能会起作用:

SELECT *
FROM categories
ORDER BY IF(parent_id, parent_id, category_id), parent_id, display_order

但由于它不能使用索引,因此速度会很慢。(虽然没有测试,可能是错误的)

第一个ORDER BY条件将父母和孩子分类在一起。然后第二个确保父母先于子女;第三类对孩子们进行分类。

而且,它显然仅在您直接描述的情况下才有效,在这种情况下,您具有两级层次结构。

2021-03-10