我有一个包含以下(简化)结构的表:
INT id,
INT type,
INT sort
我需要的是一种以某种方式对我的数据进行排序的SELECT,以便:
sort
递增排序,sort
排序。示例:
如果表格如下:
| id | type | sort |
| 1 | 1 | 3 |
| 2 | 3 | 5 |
| 3 | 3 | 1 |
| 4 | 2 | 4 |
| 5 | 1 | 2 |
| 6 | 2 | 6 |
查询应该按如下方式对结果进行排序:
| id | type | sort |
| 3 | 3 | 1 |
| 2 | 3 | 5 |
| 5 | 1 | 2 |
| 1 | 1 | 3 |
| 4 | 2 | 4 |
| 6 | 2 | 6 |
我希望这足以说清楚。
在我看来,因为这应该是一个非常常见的要求,但我没有找到任何足够接近的示例,以便能够将它自己转移到我的用例中。我想我至少不能避免一个子查询,但我自己并没有想出来。
提前感谢任何帮助。
顺便说一句:我将在CakePHP 2.1中使用此查询,所以如果您知道使用Cake的方法,请告诉我。
答案 0 :(得分:4)
这比最初听起来更简单。我相信以下应该可以解决问题:
SELECT a.id, a.type, a.sort
FROM Some_Table as a
JOIN (SELECT type, MIN(sort) as min
FROM Some_Table
GROUP BY type) as b
ON b.type = a.type
ORDER BY b.min, a.type, a.sort
为了获得最佳(最快)的结果,您可能希望获得一个索引(type
,sort
)。
如果有两个具有相同a.type
值的组(将导致混合行),您希望按b.min
(而不是(a.sort
,sort
))进行其他排序)。如果没有重复值,您可以将其删除。
答案 1 :(得分:0)
排序和类型是某些数据库上的保留字,可能会导致问题。
你尝试过吗?ORDER BY TYPE DESC, SORT ASC