我需要得到如下的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;

最佳答案

这在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

关于mysql - MySQL-按3个条件排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34118167/

10-13 02:05