MySQL:IN查詢按IN集合順序顯示


工作中新測出來的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,結果相同,如下圖:

 

后記:

  老實講,instr的知識點我有點暈,再加上一個不慎就會寫錯,遠不如field來的簡便;

  另外兩個語句的執行時間分別是:0.007s和0.006秒,消耗性能相差不多,所以我采取了第一種寫法改正了bug。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM