2015-12-18 42 views
1

我有一個MySQL的數據集是這樣的:如何將mySQL數據與特定國家/地區ID進行排序,然後按正常順序排序?

id  | name  | country_id  | sort | 
------------------------------------------------- 
0000001 Name A  2001    29.90 
0000002 Name B  2929    90.02 
0000003 Name C  2001    99.50 
0000004 Name D  2001    42.03 
0000005 Name E  2929    62.49 
0000006 Name F  1005    78.00 

通常情況下,我會做一個ORDER BY sort DESC,然後我會得到這樣的結果:

0000003 Name C  2001    99.50 
0000002 Name B  2929    90.02 
0000006 Name F  1005    78.00 
0000005 Name E  2929    62.49 
0000004 Name D  2001    42.03 
0000001 Name A  2001    29.90 

現在,我想什麼do是首先顯示country_id 2929的結果,也是由sort DESC訂購的結果,其次是sort DESC訂單中的其他結果,如果沒有country_id訂單之前的訂單。

我該怎麼做到這一點?所以基本上順序應該是:

0000002 Name B  2929    90.02 
0000005 Name E  2929    62.49 
0000003 Name C  2001    99.50 
0000006 Name F  1005    78.00 
0000004 Name D  2001    42.03 
0000001 Name A  2001    29.90 
+0

到目前爲止您嘗試過什麼? –

+0

看看這裏:[http://stackoverflow.com/questions/14104055/ordering-by-specific-field-value-first](http://stackoverflow.com/questions/14104055/ordering-by-specific-field - 值一) – Tzoreol

回答

3

使用order by FIELD

order by FIELD(country_id,'2929') DESC,sort DESC 
0

嘗試;

select 
    id , 
    name , 
    country_id , 
    sort 
from tbl 
order by (case when country_id = 2929 then 1 else 0 end) DESC, sort DESC 
0

或者以前的答案的另一種形式:

選擇 ID, 名, COUNTRY_ID, 如果(COUNTRY_ID = 2929,0,1)作爲Country_Sort, 排序從TBL 爲了 按國家_S排序DESC

0

最短的格式是:

order by country_id=2929 DESC, sort DESC 

country_id = 2929當它爲真時將被評估爲1,否則爲0,所以您可以通過country_id=2929 DESC訂購將國家2929置於頂端。

相關問題