在一些场景中, 有场景A查询出一个已经排好顺序的id , 需要到场景B中查询这些, 使用 mysql 中的 WHERE ** IN (****) , 查询出来的结果并不是按照传入的list排序的.
但是又不是按照场景B中的某一个字段排序的.
这时候需要自定义排序:ORDER BY FIELD(字段名,内容1,内容2,....),如下:
会按照字段名按照字符串内容1,内容2,...的顺序返回查询到的结果集。如果表中字段值不存在,就放在结果集最前面返回。
注意: ORDER BY FIELD() 中不能直接传入list,要用'str' , 使用foreach遍历的时候,直接逗号分割即可.
其他方法:
LOCATE()自定义排序:
LOCATE(substr,str)
返回字符串substr中第一次出现子字符串的位置 str
LOCATE(substr,str,pos)
返回字符串substr中第一个出现子 字符串的 str位置,从位置开始 pos。0 如果substr不在,则 返回str。返回 NULL如果substr 或者str是NULL
SELECT LOCATE('c','abc')
这个c在第二个位置,返回3
使用字符串出现顺序,可以ORDER BY LOCATE(字段名,'三星','苹果')
INSTR()自定义排序:
INSTR(str,substr) 在一个字符串(str)中搜索指定的字符(substr),返回发现指定的字符的位置;
可以说是反着的LOCATE()
用法:ORDER BY INSTR('三星','苹果',字段名)
CASE WHEN曲线救国
还有数据字典排序,我不喜欢用.常用还是FIELD()