MySQL IN运算符结果集顺序

时间:2011-11-18 06:20:27

标签: mysql sql-order-by

在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似乎优化了搜索并提供了默认顺序(与存储在文件系统中的那些记录的顺序相同)。

1 个答案:

答案 0 :(得分:10)

您可以在ORDER BY子句中使用MySQL的field函数:

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,...)

     

返回 str1 str2 str3 str 的索引(位置),...名单。如果找不到 str ,则返回0。

     

如果FIELD()的所有参数都是字符串,则所有参数都将作为字符串进行比较。如果所有参数都是数字,则将它们作为数字进行比较。否则,参数将被比较为double。