MySQL查询按指定数组顺序返回结果的实现问题
解决MySQL查询结果按指定数组顺序排序的问题
MySQL中使用IN查询时,默认会按照表的主键或索引顺序返回结果,不会遵循IN列表里的元素顺序。要让结果和给定数组$arr的顺序一致,直接用ORDER BY配合FIELD()函数即可,具体实现如下:
先把数组转成逗号分隔的字符串,拼接到查询语句中,用
FIELD(id, 元素1, 元素2, ...)指定排序规则:$arr = [61, 14, 197, 101, 229, 240, 144, 239, 75]; $idStr = implode(',', $arr); $query = "SELECT * FROM cases WHERE cases.id IN ($idStr) ORDER BY FIELD(id, $idStr)";原理:
FIELD()函数会返回每个id在传入的元素列表中的位置(比如61在列表里是第1位,返回1;14是第2位,返回2),ORDER BY按这个返回值升序排列,就能让结果和数组$arr的顺序完全一致。
注意事项:
- 如果数组中的元素是字符串类型,需要给每个元素加上单引号,比如用
implode("','", $arr)后再包裹单引号:"'".implode("','", $arr).'"' - 要确保数组非空,避免生成
IN ()这种无效SQL语句
内容的提问来源于stack exchange,提问作者user43436
相关产品推荐
相关产品推荐

