如何使用 MySQL COALESCE 指定主要排序顺序
How to specify Primary sort order using MySQL COALESCE
我有一个遗留 table,它使用 Parent/Child 结构及其 ID,我需要按 Parent 的 Names 对它进行排序=],然后 Child(Parent 有 null
parent_id)。
我已经能够让它按 Child 名称和下面显示的 SQL 进行排序,但我无法让它对主(Cables
应该在 Cameras
).
之前
SELECT a.id, a.parent_id,a.name
FROM `equipment` AS a
ORDER BY COALESCE(a.parent_id, a.id), a.parent_id IS NOT NULL, a.name
我修改了各种 ORDER 可能性,但无法得到我需要的那种。任何指导表示赞赏。
Table 行
id | parent_id | name
--------------------------------
1 | null | Cameras
2 | 1 | HandyCam 2000 5-50
3 | 1 | Netgear 360
4 | null | Tripods
5 | 4 | Deluxe Tripod
6 | null | Lighting
7 | 6 | Light Diffuser
10 | 6 | Really bright bulbs
11 | 1 | 16MM Handheld
12 | 6 | Big Lightbulb assembly
13 | 4 | HandyCam Stand
16 | 4 | My New Tripod
181 | null | Cables
排序结果(只有 Children 被排序)
id | parent_id | name
--------------------------------
1 | null | Cameras
11 | 1 | 16MM Handheld
2 | 1 | HandyCam 2000 5-50
3 | 1 | Netgear 360
4 | null | Tripods
5 | 4 | Deluxe Tripod
13 | 4 | HandyCam Stand
16 | 4 | My New Tripod
6 | null | Lighting
10 | 6 | Really bright bulbs
12 | 6 | Big Lightbulb assembly
7 | 6 | Light Diffuser
181 | null | Cables
您需要将 table 与其自身连接起来,这样您就可以获得每个 child 的 parent 的名称,并在排序中使用它而不是 [=11] =]
SELECT a.id, a.parent_id,IF(a.parent_id IS NULL, a.name, CONCAT(' ', a.name)) AS name
FROM `studio_tvs_equipment` AS a
JOIN studio_tvs_equipment AS b ON IF(a.parent_id IS NULL, a.id = b.id, b.id = a.parent_id)
ORDER BY IF(a.parent_id IS NULL, a.name, b.name), a.parent_id IS NOT NULL, a.name
我有一个遗留 table,它使用 Parent/Child 结构及其 ID,我需要按 Parent 的 Names 对它进行排序=],然后 Child(Parent 有 null
parent_id)。
我已经能够让它按 Child 名称和下面显示的 SQL 进行排序,但我无法让它对主(Cables
应该在 Cameras
).
SELECT a.id, a.parent_id,a.name
FROM `equipment` AS a
ORDER BY COALESCE(a.parent_id, a.id), a.parent_id IS NOT NULL, a.name
我修改了各种 ORDER 可能性,但无法得到我需要的那种。任何指导表示赞赏。
Table 行
id | parent_id | name
--------------------------------
1 | null | Cameras
2 | 1 | HandyCam 2000 5-50
3 | 1 | Netgear 360
4 | null | Tripods
5 | 4 | Deluxe Tripod
6 | null | Lighting
7 | 6 | Light Diffuser
10 | 6 | Really bright bulbs
11 | 1 | 16MM Handheld
12 | 6 | Big Lightbulb assembly
13 | 4 | HandyCam Stand
16 | 4 | My New Tripod
181 | null | Cables
排序结果(只有 Children 被排序)
id | parent_id | name
--------------------------------
1 | null | Cameras
11 | 1 | 16MM Handheld
2 | 1 | HandyCam 2000 5-50
3 | 1 | Netgear 360
4 | null | Tripods
5 | 4 | Deluxe Tripod
13 | 4 | HandyCam Stand
16 | 4 | My New Tripod
6 | null | Lighting
10 | 6 | Really bright bulbs
12 | 6 | Big Lightbulb assembly
7 | 6 | Light Diffuser
181 | null | Cables
您需要将 table 与其自身连接起来,这样您就可以获得每个 child 的 parent 的名称,并在排序中使用它而不是 [=11] =]
SELECT a.id, a.parent_id,IF(a.parent_id IS NULL, a.name, CONCAT(' ', a.name)) AS name
FROM `studio_tvs_equipment` AS a
JOIN studio_tvs_equipment AS b ON IF(a.parent_id IS NULL, a.id = b.id, b.id = a.parent_id)
ORDER BY IF(a.parent_id IS NULL, a.name, b.name), a.parent_id IS NOT NULL, a.name