在一个查询中按两个不同的行排序

时间:2013-04-02 07:18:07

标签: php mysql group-by

这里有一个概念证明的问题:

基本上我想将以下两个查询合并为一个:

SELECT `cat` FROM `test` group by `cat` order by `catSort`,`ID` desc
$cat-->  SELECT * FROM `test` where `cat`=$cat group by `cat2` order by `cat2Sort`,`ID` desc

让我详细说明一下。假设我有下表test

-----------------------------------------
| ID | cat  | cat2 | catSort | cat2Sort |
|----------------------------------------
| 1  | cat  | sub  | 0       | 0        |
| 2  | cat  | sub2 | 0       | 1        |
| 3  | cat  | sub  | 0       | 1        |
| 4  | cat2 | sub  | 1       | 0        |
| 5  | cat2 | sub2 | 1       | 0        |
| 6  | cat  | sub2 | 0       | 0        |
----------------------------------------

这样做有两个类别,其中cat2cat的子类别,catcatSort排序,cat2排序依据,你猜对了,cat2Sort。 这个层次结构应如下所示:

cat
  sub  ID:1
  sub  ID:3
  sub2 ID:6
  sub2 ID:2
cat2
  sub  ID:4
  sub2 ID:5

我如何通过NOT order by catSort, cat2Sort实现此目的,因为稍后会添加排序。 它们需要按ID排序,以便新添加的条目到达底部,但同时按排序字段排序(如果已设置)。例如order by catSort, cat2Sort, ID

另外,我需要将它们分组到另一个查询中才能得到这个:

cat
  sub  ID:1
  sub2 ID:6
cat2
  sub  ID:4
  sub2 ID:5

我最初的想法是将两个字段组合在一起并按其分组。类似的东西:

SELECT *, combine(`cat`,`cat2`) as `tempCat` FROM `test`
group by `tempCat` order by `catSort`,`serSort`,`ID` desc

但当然完全弥补了。

有任何想法吗?

1 个答案:

答案 0 :(得分:0)

使用可以按两列排序

ORDER BY `column1` ASC/DESC, `column2` ASC/DESC