在项目开发中我们经常用到按照某结果集进行数据查询的场景,下面的分享也是波波遇到的坑儿。我以为数据库查询只要将IN结果集的顺序排好没问题,那么查出来的数据都会按照IN结果集的顺序显示,但事实上并非如此。
关于Mysql数据库按照IN结果集顺序查询显示的解决方法:
方法一:(适用于TP5)
- $val = implode(",",$val);//将数组进行转换,重要!!!
- $data = Db::name("数据表")->where('字段','IN',$val)->order('field(字段,'.$val.')')->select();
方法二:Mysql原生查询
- select * from table where `id` IN (3,6,9,1,2,5,8,7) order by field(id,3,6,9,1,2,5,8,7);
- select * from test where `id` in(3,1,5) order by find_in_set(id,'3,1,5');
- select * from test where `id` in(3,1,5) order by substring_index('3,1,2',id,1);
上述几种查询方法均测试没有问题,如有疑问,欢迎,算了不用留言了。