首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分组并对每个组进行排序

问分组并对每个组进行排序
EN

Stack Overflow用户
提问于 2016-06-14 00:36:40
回答 2查看 59关注 0票数 1

我有一个mysql表,用于存储带有模式的注释和子注释:id、replyTo、text,如果注释不是子注释,则replyTo可能为null。

目前,我正在执行以下查询:

代码语言:javascript
复制
(select id as replyTo, text from Comments WHERE replyTo IS NULL) 
UNION 
(select  replyTo,text from Comments WHERE replyTo IS NOT NULL) ORDER BY replyTo;

这让我按顺序给出了评论:

代码语言:javascript
复制
1. comment
2. subcomment

所以如果我有:

代码语言:javascript
复制
+----+---------+-----------+
| id | replyTo | text      |
+----+---------+-----------+
|  1 |    NULL | comment 1 |
|  2 |    NULL | comment 2 |
|  3 |       1 | sub 1     |
|  4 |       2 | sub 2     |
+----+---------+-----------+

这意味着:

代码语言:javascript
复制
+---------+-----------+
| replyTo | text      |
+---------+-----------+
|       1 | comment 1 |
|       1 | sub 1     |
|       2 | comment 2 |
|       2 | sub 2     |
+---------+-----------+

我的问题是,我怎样才能让他们倒过来,就是这样:

代码语言:javascript
复制
+-+------------+
|2|comment 2   |
|2|sub 2       |
|1|comment 1   |
|1|sub 1       |
+-+------------+

换句话说,我想按照replyTo ASC对元素进行排序,按replyTo对它们进行分组(而不是mysql,它将根据属性删除所有重复的行),然后按replyTo DESC对组进行排序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-14 00:43:42

试试这个:

代码语言:javascript
复制
select replyTo, text from
(
select id as replyTo, text from Comments WHERE replyTo IS NULL 
UNION 
select  replyTo,text from Comments WHERE replyTo IS NOT NULL ORDER BY replyTo
)
order by replyTo DESC;
票数 0
EN

Stack Overflow用户

发布于 2016-06-14 00:49:35

试一试

代码语言:javascript
复制
SELECT COALESCE(replyTo,id) AS replyTo, text
FROM Comments
ORDER BY COALESCE(replyTo,id) DESC, id
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37801224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档