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,是效率很低的排序方式。除非數據變化頻率很低,或者有長時間的緩存,否則不建議用這樣的方式排序。
作者建議在程序代碼中自行排序。
但是也有人說這種排序不會出現什麼性能瓶頸
具體還是自己測試一下吧。