幸福飞过海 - in https://fengqi.me/tag/in/ [记录]mysql的in查询, 查询结果按in集合顺序显示 https://fengqi.me/db/151.html 2013-08-22T08:42:00+00:00 需求来自, 某些特定场景, 比如人工推荐, 编辑后台输入一串id, 前台需要按输入的id顺序显示.mysql 的in语法如下:SELECT * FROM `single` WHERE `single_id` IN ('987', '256', '381', '586'); 正常情况下, 取出的数据, 会按照 256, 381, 586, 987排序, 而我需要的是987, 256, 381, 586.所以需要对sql进行改造:SELECT * FROM `single` WHERE `single_id` IN ('987', '256', '381', '586') ORDER BY FIELD (`single_id`, '987', '256', '381', '586'); 这样就会按照in集合的顺序返回, 但是同时也带来一个问题:EXPLAIN会发现Using filesort, 大多数情况下这是sql语句性能低下的代表, 所以建议非特殊场景不要使用, 至于真正损失的性能, 有待测试.另外, 也可以直接IN, 然后程序排序, 谁的综合效率谁更高呢??? 同样有待测试.