我敢肯定这已经被问过了,但是我不知道确切地称呼它是什么来找到答案。
我有一个类别和子类别的表格。他们每个人都有一个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中是可能的,还是我需要使用多个查询
谢谢布拉德
这样的事情可能会起作用:
SELECT * FROM categories ORDER BY IF(parent_id, parent_id, category_id), parent_id, display_order
但由于它不能使用索引,因此速度会很慢。(虽然没有测试,可能是错误的)
第一个ORDER BY条件将父母和孩子分类在一起。然后第二个确保父母先于子女;第三类对孩子们进行分类。
ORDER BY
而且,它显然仅在您直接描述的情况下才有效,在这种情况下,您具有两级层次结构。