2015-02-23 88 views
0

下面是我的數據;如何根據需要對這個MySQL查詢的結果進行排序?

type  valid blocked 
--------- ----- -------- 
CPI  0  0 
CPI  1  0 
CPI  0  1 
CPI  1  1 
CPA  0  0 
CPA  1  0 
CPA  0  1 
CPA  1  1 
CPE  0  0 
CPE  1  0 
CPE  0  1 
CPE  1  1 
PIN  0  0 
PIN  1  0 
PIN  0  1 
PIN  1  1 

以下是我想要的排序方式;

type  valid blocked 
--------- ----- -------- 
CPI  1  0 
CPA  1  0 
CPI  1  1 
CPA  1  1 
CPI  0  0 
CPA  0  0 
CPI  0  1 
CPA  0  1 
CPE  1  0 
CPE  1  1 
CPE  0  0 
CPE  0  1 
PIN  1  0 
PIN  1  1 
PIN  0  0 
PIN  0  1 

所以,CPI和CPA先按有效然後解除封鎖排序。接下來,它的CPI按有效然後解除封鎖並最終PIN排序,再次按有效和未封鎖排序。

這甚至可以在一個查詢中這樣排序嗎?謝謝。

回答

1
select * from your_table 
order by case when type in ('CPI','CPA') then 1 
       when type = 'CPE' then 2 
       when type = 'PIN' then 3 
     end, 
     valid <> 0, 
     blocked 
+1

大,你缺少的結束和有效的<> 0之後有一個逗號改爲有效= 0(奇怪?),但另有完美的作品。 – iguanaman 2015-02-23 12:27:28

+0

是的,我忘記了。更正它。 – 2015-02-23 12:33:54

0
select * from your_table 
order by `type` in ('CPI','CPA') desc 
    , `type` = 'CPE' desc 
    , `type` = 'PIN' desc 
    , valid desc, blocked 
    , `type` = 'CPI' desc 
; 
+0

如果我可能會提出建議,對代碼的某些描述可能會對提問者有所幫助。 – 2015-02-23 14:58:39

相關問題