在mysql in 查询时,如果你没加order by排序时,结果可能是按照mysql自认为舒服的排序显示。
在一般的业务下这样没毛病,但是有时候我们想让结果按照我们in()里的数据排序显示。
比如在使用coreseek搜索时,搜索引擎给我们返回了一组id,这组id是按权重排序的,不能再动他们的排序。
但是我们可能要拿着这组id,再查询一次mysql数据库,拼装成适合我们业务的数据集合,但是却发现在in查询之后排序被打乱了,这时候怎么办呢?
废话那么多,可能你也理解我的意思了,直接上代码。
SELECT * FROM `post` WHERE id IN (27,31,29,35,36,37,38,39,40,43,44,45,46,47,50,53,54,55,56,58,59,60,61,63,73,78,79,81,84,85) ORDER BY FIND_IN_SET(id,'27,31,29,35,36,37,38,39,40,43,44,45,46,47,50,53,54,55,56,58,59,60,61,63,73,78,79,81,84,85') LIMIT 0,30
使用FIND_IN_SET可以解决我们的问题
第一个参数是字段名(不加引号)
第二个参数是id集合(加引号)