批量查询id的顺序问题
简介
批量查询在sql查询中,特别常用。对应的sql模板如
SELECT cols FROM table WHERE primary_key in (example1,example2)
一般情况下,我们都会认为我们传入example的顺序和实际mysql的结果是对应的,也就是上看的sql返回的cols顺序也应该是example1_cols,example2_cols,实际上是事与愿违的。
测试
根据图上的测试结果,可以得知。传入的id顺序并不能影响返回结果的顺序。Mysql会默认将结果根据主键进行排序。
如何让按照传入顺序返回
通过查询官方文档,我们可以使用 ORDER BY FIELD(col,example...) 来实现按照给定的顺序获取返回结果。
我们先确认一下FIELD()函数在Mysql中的作用:
FIELD() is a function that returns the index position of a comma-delimited list if the value you are searching for exists.
IF id = 1, then FIELD(id,3,2,1,4) returns 3 (position where 1 is in the list)
IF id = 2, then FIELD(id,3,2,1,4) returns 2 (position where 2 is in the list)
IF id = 3, then FIELD(id,3,2,1,4) returns 1 (position where 3 is in the list)
IF id = 4, then FIELD(id,3,2,1,4) returns 4 (position where 4 is in the list)
IF id = anything else, then FIELD(id,3,2,1,4) returns 0 (not in the list)
The ORDER BY values are evaluated by what FIELD() returns
简单来说就是,会根据给定字段对应的值,返回值对应的索引,然后ORDER BY会根据FIELD给定的结果进行排序,从而实现给定参数顺序返回结果。