我有一个模式,本质上是这样的:
CREATE TABLE `data` (
`id` int(10) unsigned NOT NULL,
`title` text,
`type` tinyint(4),
`parent` int(10)
)type字段只是一个枚举,其中1是父类型,2是子类型(实际上有很多类型,其中有些应该像父类型,有些应该像子类型)。parent字段指示记录是另一个记录的子记录。
我知道这对于我想要构建的查询可能不是理想的,但这是我必须使用的。
我想对数据进行排序和分组,以便父记录按title排序,在每个父记录下分组是由title排序的子记录。就像这样:
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,那么它应该分组在它的父级下面。
发布于 2012-04-03 20:34:18
SELECT * FROM `data` ORDER BY COALESCE(`parent`, `id`), `parent`, `id`发布于 2012-04-03 20:31:04
下面是测试在Server上工作的解决方案。在MySQL上应该基本相同
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]发布于 2012-04-03 20:39:56
你说过你想把它按标题排序,对吧?
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。
https://stackoverflow.com/questions/10000643
复制相似问题