我确信之前已经问过这个问题,但我不知道该怎么称呼才能找到答案.
我有一个类别和子类别的表.它们每个都有一个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
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个SQL查询,它将按顺序为我提供所有类别:
A,a1,a2,a3,B,b1,b2,b3
SELECT * FROM categories ORDER BY display_order
Run Code Online (Sandbox Code Playgroud)
这在SQL中是否可行,或者我是否需要使用多个查询
谢谢,布拉德
这样的事可能会奏效:
SELECT *
FROM categories
ORDER BY IF(parent_id, parent_id, category_id), parent_id, display_order
Run Code Online (Sandbox Code Playgroud)
但由于它不能使用索引,因此它会很慢.(虽然没有测试,可能是错的)
第一个ORDER BY条件是将父母和孩子排在一起; 然后第二个确保父母先于其子女; 第三个人将孩子们分开.
此外,它显然只适用于您直接描述的情况,即您具有两级层次结构.