1

我有一个表格菜单,其中包含通过外键引用同一表格中其他行的行。
这里的表:

+----+---------------+--------+
| id | title         | parent |
+----+---------------+--------+
| 1  | Enseignements | NULL   |
| 2  | Juments       | 4      |
| 3  | Étalons       | 4      |
| 4  | Animaux       | NULL   |
| 5  | Tarifs        | 1      |
+----+---------------+--------+

我想根据层次结构和字母顺序对行进行分组,如下所示:

+----+---------------+--------+
| id | title         | parent |
+----+---------------+--------+
| 4  | Animaux       | NULL   |
| 3  | Étalons       | 4      |
| 2  | Juments       | 4      |
| 1  | Enseignements | NULL   |
| 5  | Tarifs        | 1      |
+----+---------------+--------+

我只是设法将来自同一分支的项目分组。子级项目按title排序。事实上,我希望所有的第一级项目也按title排序,像这样:

+----+---------------+--------+
| id | title         | parent |
+----+---------------+--------+
| 1  | Enseignements | NULL   |
| 5  | Tarifs        | 1      |
| 4  | Animaux       | NULL   |
| 3  | Étalons       | 4      |
| 2  | Juments       | 4      |
+----+---------------+--------+

使用代码:

SELECT title, COALESCE(parent, id), parent
FROM menu
GROUP BY COALESCE(parent, id), title

我怎样才能做到这一点 ?

4

1 回答 1

0

SQL小提琴

MySQL 5.5.30 架构设置

CREATE TABLE Table1
    (`id` int, `title` varchar(13), `parent` varchar(4))
;

INSERT INTO Table1
    (`id`, `title`, `parent`)
VALUES
    (1, 'Enseignements', NULL),
    (2, 'Juments', '4'),
    (3, 'Étalons', '4'),
    (4, 'Animaux', NULL),
    (5, 'Tarifs', '1')
;

查询 1

SELECT title, COALESCE(parent, id), parent
FROM Table1
GROUP BY 2,1
order by COALESCE(parent, id) desc,title asc

结果

|         TITLE | COALESCE(PARENT, ID) | PARENT |
-------------------------------------------------
|       Animaux |                    4 | (null) |
|       Étalons |                    4 |      4 |
|       Juments |                    4 |      4 |
| Enseignements |                    1 | (null) |
|        Tarifs |                    1 |      1 |
于 2013-05-30T06:06:46.670 回答