MySQL - 按3个标准排序

时间:2015-12-06 13:55:00

标签: mysql

我需要得到如下的MySQL订单结果:

id | active |    year | size
----------------------------
1  |      1 | 1Q 2014 | 650
2  |      1 | 3Q 2010 | 200
3  |      1 | 1Q 2010 | 1650
4  |      1 | 4Q 2012 | 0
5  |      0 | 1Q 2014 | 650
6  |      0 | 2Q 2012 | 1200
7  |      0 | 1Q 2014 | 0
  • 最重要的是活跃
  • 下一个订单优先级是从最新到最旧的年份(1Q - 4Q表示季度,因此4Q最新比1Q) - 只要大小> 0, 如果size = 0 - 年份不是优先级(记录ID 4低于记录ID 3)

这在MySQL或Laravel Eloguent中是否可行? 谢谢你,亲切的问候, 保罗

正确答案:

SELECT * FROM my_table
ORDER BY active DESC,
(size > 0) DESC, 
RIGHT(year, 4) DESC, 
year DESC;

1 个答案:

答案 0 :(得分:4)

MySQL有点痛苦,因为year列有一个神秘的结构。最好将其存储为YYYY Q格式。那么它很容易排序。但是,通过一些操纵,你可以做你想做的事:

order by active desc,                         -- actives first
         (size > 0) desc,                     -- then size > 0
         substring_index(year, ' ', 2) desc,  -- then order by the year
         year desc;                           -- then order by the quarter