标签 in 下的文章

[记录]mysql的in查询, 查询结果按in集合顺序显示

需求来自, 某些特定场景, 比如人工推荐, 编辑后台输入一串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, 然后程序排序, 谁的综合效率谁更高呢??? 同样有待测试.