MySQL按父/子和名称排序
如何使用MySQL查询表中的信息,以返回表按类型名称和父类型排序的信息 作为一个例子,我想举一个这样的表格:MySQL按父/子和名称排序,mysql,Mysql,如何使用MySQL查询表中的信息,以返回表按类型名称和父类型排序的信息 作为一个例子,我想举一个这样的表格: +---------+-------------+------------+ | type_id | parent_type | type_name | +---------+-------------+------------+ | 1 | 0 | Type 1 | | 2 | 0 | Type B |
+---------+-------------+------------+
| type_id | parent_type | type_name |
+---------+-------------+------------+
| 1 | 0 | Type 1 |
| 2 | 0 | Type B |
| 3 | 0 | Type 3 |
| 4 | 3 | Sub Type 1 |
| 5 | 0 | Type 5 |
| 6 | 0 | Type 6 |
| 7 | 3 | Sub Type 2 |
| 8 | 0 | Type C |
| 9 | 1 | Sub Type 1 |
+---------+-------------+------------+
然后使用查询将其拉出,如:
+---------+-------------+------------+
| type_id | parent_type | type_name |
+---------+-------------+------------+
| 1 | 0 | Type 1 |
| 9 | 1 | Sub Type 1 |
| 3 | 0 | Type 3 |
| 4 | 3 | Sub Type 1 |
| 7 | 3 | Sub Type 2 |
| 5 | 0 | Type 5 |
| 6 | 0 | Type 6 |
| 2 | 0 | Type B |
| 8 | 0 | Type C |
+---------+-------------+------------+
基本上使子行位于父行之后,并按类型名称对父行排序
到目前为止,这是我通过这个查询所能得到的:
SELECT *
FROM `item_types` AS b
ORDER BY
CASE
WHEN `parent_type` = 0
THEN `type_id`
ELSE `parent_type`
END,
type_name;
您有一个自引用表。。。所以你需要像这样的东西
select id, parent_id, name
from (select type_id as id, type_id as parent_id, type_name as name
from item_types
where parent_type = 0
UNION
select type_id as id, parent_type as parent_id, type_name as name)
from item_types
where parent_type != 0)
order by id, parent_id, name