2011-11-18 78 views
4

在使用IN運算符的MySQL中,我們可以要求MySQL以與IN集合相同的順序返回結果集(記錄集)嗎?MySQL IN運算符結果集順序

解釋: 假設我們有一個表 items (item_id, item_name);

和查詢:

select * from items where item_id in (1,3,5,7,2,4,6,8);

我們可以有結果集(記錄集),其中記錄都在相同的順序作爲IN運算符集合。 即1,3,5,7,2,4,6,8 of record_id s

這不是這種情況; MySQL似乎優化了搜索並給出了默認順序(與存儲在文件系統上的那些記錄的順序相同)。

+0

重複的:http://stackoverflow.com/questions/396748/ordering-by-the-order-of-values-in-a-sql-in-clauses – punit

回答

8

你可以使用MySQL的field功能在您的ORDER BY子句:

select * 
from items 
where item_id in (1,3,5,7,2,4,6,8) 
order by field(item_id, 1,3,5,7,2,4,6,8) 

field function

FIELD(str,str1,str2,str3,...)

返回海峽的索引(位置)在str1str2,str3,...列表。如果沒有找到str,則返回0。

如果FIELD()的所有參數都是字符串,則將所有參數作爲字符串進行比較。如果所有參數都是數字,則將其作爲數字進行比較。否則,參數將被比較爲double。