ORDER BY FIELD(column, value1, value2, value3, ...)
按 value1, value2, value3... 指定的順序排序,未列出的值排在最後(按默認順序)。
-- 訂單狀態自定義順序:已發貨(3) > 已付款(4) > 待付款(0) > 已取消(2) > 退款中(1)
SELECT * FROM orders
ORDER BY FIELD(status, 3, 4, 0, 2, 1);
ORDER BY FIELD(type, 'A','B'), create_time DESCFIELD() 不走索引,大數據量建議應用層排序或添加排序權重列| 方案 | 優點 | 缺點 |
|---|---|---|
| FIELD() | 語義清晰、SQL 簡潔 | 不走索引、硬編碼值 |
| CASE WHEN | 邏輯靈活 | 冗長 |
| 排序權重列 | 可索引、動態調整 | 需維護額外列 |