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);
出來的順序就是指定的順序了sql
關於這種排序的效率,
有文章指出:
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,是效率很低的排序方式。除非數據變化頻率很低,或者有長時間的緩存,不然不建議用這樣的方式排序。
做者建議在程序代碼中自行排序。
可是也有人說這種排序不會出現什麼性能瓶頸
具體仍是本身測試一下吧。緩存