1. 程式人生 > >mysql in 排序 也可以按in裡面的順序來排序

mysql in 排序 也可以按in裡面的順序來排序

SQL: select * from table where id IN (3,6,9,1,2,5,8,7);
這樣的情況取出來後,其實,id還是按1,2,3,4,5,6,7,8,9,排序的,但如果我們真要按IN裡面的順序排序怎麼辦?SQL能不能完成?是否需要取回來後再foreach一下?
其實可以這樣
sql: select * from table where id IN (3,6,9,1,2,5,8,7) order by field(id,3,6,9,1,2,5,8,7);
出來的順序就是指定的順序了

關於這種排序的效率,
有文章指出:
FIELD(str,str1,str2,str3,…)
Returns the index (position) of str in the str1, str2, str3, … list. Returns 0 if str is not found.
排序過程:把選出的記錄的 id 在 FIELD 列表中進行查詢,並返回位置,以位置作為排序依據。
這樣的用法,會導致 Using filesort,是效率很低的排序方式。除非資料變化頻率很低,或者有長時間的快取,否則不建議用這樣的方式排序。
作者建議在程式程式碼中自行排序。
但是也有人說這種排序不會出現什麼效能瓶頸
具體還是自己測試一下吧。