多语言展示
当前在线:1124今日阅读:176今日分享:34

MySql使用经验——通过in查询怎样排序问题

工作中碰到了一个问题,就是批量查询时,mysql通过in查询的结果和in中的值的顺序并不一致
工具/原料

mysql数据库

方法/步骤
1

具体查询如下:SELECT*FROM tableNameWHERE id IN(1799 , 63323849672846 , 13 , 161 , 926221118 , 124571 , 55434 , 9297877807)查询的结果和in中的顺序并不一致,也就是说在批量查询时,mysql的查询并不是按照in中的值得顺序来查询的。那怎么才能保证和in查询中的顺序相同呢?查询了资料发现有两种方式可以对in查询的结果进行排序。一种是order by find_in_set,另外一种是order by substring_index

2

看第一种方式:SELECT*FROM tableName WHERE id IN(1799 , 63323849672846 , 13 , 161 , 926221118 , 124571 , 55434 , 9297877807)ORDER BY  FIND_IN_SET(poi_id,'1799 , 63323849672846 , 13 , 161 , 926221118 , 367740002 , 55434 , 929787')这种方式有个问题,就是order by FIND_IN_SET的''中的字段前面不能有空格,如果有空格是不会生效的,像我的这个例子中的就因为有空格而不能正常排序。所以使用的时候要特别注意。

3

第二种方法:SELECT*FROM tableName WHERE order by substring_index('1799 , 63323849672846 , 13 , 161 , 926221118 , 367740002 , 55434 , 929787',id,1);两种方式都能解决in查询的顺序问题。但是第一种方法如果不小心加了多余的空格就会有问题,所以一定要小心使用。

4

推荐工具:workbench-》mysql自带的客户端图形界面,navicat。用过的都知道

注意事项

不同版本可能有区别

推荐信息