select * from file_info where id in(3099,2727,2485,2488,2487,3029);
结果如下图:
select * from file_info where id in(3099,2727,2485,2488,2487,3029) order by field(id, 3099,2727,2485,2488,2487,3029);
这是说,先in查询,把查出的记录的id在FIELD列表里面进行查找,以位置作为排序依据返回结果。
解决方案二:
select * from file_info where id in(3099,2727,2485,2488,2487,3029) order by INSTR(‘,3099,2727,2485,2488,2487,3029,‘, CONCAT(‘,‘,id,‘,‘));
instr函数为字符查找函数,查找一个字符串在另一个字符串中首次出现的位置,其中逗号的作用是精确匹配,没有逗号,匹配就会出现问题。
后记:
老实讲,instr的知识点我有点晕,再加上一个不慎就会写错,远不如field来的简便;
另外两个语句的执行时间分别是:0.007s和0.006秒,消耗性能相差不多,所以我采取了第一种写法改正了bug。
原文:https://www.cnblogs.com/luckyliulin/p/11509571.html