mysql运用in查询有序集合时,可用field关键字
工作中新测出来的bug,经查找,发现场景是这样子的:
一个课程在添加多个课件的时候,课件排列的顺序对应的课件id是3099,2727,2485,2488,2487,3029,
因此代码里我使用了IN查询,SQL语句如下:
select * from file_info where id in(3099,2727,2485,2488,2487,3029);
结果如下图:
问题来了,in查询默认是按id升序排列的,但我添加的课件并不是按照id大小顺序排列的,我需要拿到的是按照给出的ids顺序查出的结果。
解决方案一:
select * from file_info where id in(3099,2727,2485,2488,2487,3029) order by field(id, 3099,2727,2485,2488,2487,3029);
这是说,先in查询,把查出的记录的id在FIELD列表里面进行查找,以位置作为排序依据返回结果。
解决方案二:
select * from file_info where id in(3099,2727,2485,2488,2487,3029) order by INSTR(',3099,2727,2485,2488,2487,3029,', CONCAT(',',id,','));
instr函数为字符查找函数,查找一个字符串在另一个字符串中首次出现的位置,其中逗号的作用是精确匹配,没有逗号,匹配就会出现问题。
执行两个两个SQL,结果相同,如下图:

后记:
两个语句的执行时间分别是:0.007s和0.006秒,消耗性能相差不多,所以我采取了第一种写法改正了bug。
此博客只是为了记忆相关知识点,大部分为网络上的文章,在此向各个文章的作者表示感谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决