MySQL自定义排序ORDER BY FIELD

在一些场景中, 有场景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()


__EOF__

本文作者Sappy
本文链接https://www.cnblogs.com/Sappy/p/17055407.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Sappy  阅读(928)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示