IN() 函數內的MySQL 排序
使用IN() 子句執行查詢時,可能需要根據函數中提供的順序返回項目。預設情況下,MySQL 不保證此順序。
考慮以下範例:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');
預期輸出可能會依照值輸入IN() 函數的順序排序:
id | name |
---|---|
5 | B |
6 | B |
1 | D |
15 | E |
17 | E |
9 | C |
18 | C |
相反,MySQL 可能會套用自己的排序演算法,這可能會導致不同的順序。
解決方案:
為了確保想要的順序,MySQL提供了FIELD()函數。此函數接受一個字串和一系列字串,並傳回第一個字串在後續參數中的位置。
利用 FIELD(),您可以如下對輸出進行排序:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C') ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
此查詢可確保按 IN() 函數中指定的順序傳回行。
效能最佳化:
雖然 FIELD() 函數滿足想要的功能,重要的是要考慮效能影響。對於大型資料集,利用專門為排序設計的索引列可以顯著提高效能。
以上是如何控制 MySQL IN() 函數中結果的順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!