我有一个表 menu ,其中包含通过外键引用同一表中其他行的行。
这里的表:
+----+---------------+--------+
| 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
我该怎么做?
答案 0 :(得分:0)
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
<强> Results 强>:
| TITLE | COALESCE(PARENT, ID) | PARENT |
-------------------------------------------------
| Animaux | 4 | (null) |
| Étalons | 4 | 4 |
| Juments | 4 | 4 |
| Enseignements | 1 | (null) |
| Tarifs | 1 | 1 |