首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mySQL分层分组排序

mySQL分层分组排序
EN

Stack Overflow用户
提问于 2012-04-03 20:12:17
回答 3查看 1.1K关注 0票数 2

我有一个模式,本质上是这样的:

代码语言:javascript
复制
CREATE TABLE `data` (
  `id` int(10) unsigned NOT NULL,
  `title` text,
  `type` tinyint(4),
  `parent` int(10)
)

type字段只是一个枚举,其中1是父类型,2是子类型(实际上有很多类型,其中有些应该像父类型,有些应该像子类型)。parent字段指示记录是另一个记录的子记录。

我知道这对于我想要构建的查询可能不是理想的,但这是我必须使用的。

我想对数据进行排序和分组,以便父记录按title排序,在每个父记录下分组是由title排序的子记录。就像这样:

代码语言:javascript
复制
 ID | title       |type |parent 
--------------------------------
 4  | ParentA     | 1   |
 2  | ChildA      | 2   | 4
 5  | ChildB      | 2   | 4
 7  | ParentB     | 1   |
 9  | ChildC      | 2   | 7
 1  | ChildD      | 2   | 7

** 编辑 **

我们应该能够将type字段完全从图片中删除。如果parent不是null,那么它应该分组在它的父级下面。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-03 20:34:18

代码语言:javascript
复制
SELECT * FROM `data` ORDER BY COALESCE(`parent`, `id`), `parent`, `id`
票数 2
EN

Stack Overflow用户

发布于 2012-04-03 20:31:04

下面是测试在Server上工作的解决方案。在MySQL上应该基本相同

代码语言:javascript
复制
select Id, Title, [Type], Id as OrderId from Hier h1 where [Type] = 1
union
select Id, Title, [Type], Parent as OrderId from Hier h2 where [Type] = 2
order by OrderId, [Type]
票数 0
EN

Stack Overflow用户

发布于 2012-04-03 20:39:56

你说过你想把它按标题排序,对吧?

代码语言:javascript
复制
SELECT id, title, parent
FROM
  ( SELECT id, title, parent,
    CASE WHEN parent is null THEN title ELSE CONCAT((SELECT title FROM `data` d2 WHERE d2.id = d.parent), '.', d.title) END AS sortkey
    FROM `data` d
   ) subtable
ORDER BY sortkey

编辑:编辑以从查询中删除type

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10000643

复制
相关文章

相似问题

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