2011-11-18 63 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。