MySQL 的自訂排序
  • 7,370 views,
  • 2013-10-18,
  • 上傳者: Kuann Hung,
  •  0
我想應該很多人在使用資料庫的時候都想要一個 "自訂排序" 功能吧?
 
比如說,如果你的資料庫中有一個欄位叫做 Priority,然後存的資料分別為 High, Normal, Low。所以你在撈資料撈時候自然而然就會希望它排序的時候是 High 的排最前面,然後分別是 Normal and Low。但是很不幸的,如果你直接下 Order By Priority 的話,你會得到的順序會是 High, Low and Normal. 因為他會根據英文字母的排序。所以是 H -> L -> N。
 
不過神奇的 MySQL (我一直覺得 MySQL 是一個很神奇的資料庫,它提供了許多難以想像的便利功能,又有極佳的效能,重點是免費!!) 提供了一個 Function 可以達到這個目的 - Field
 
Field 這個 Function 的用法如下:
    FIELD(str,str1,str2,str3,...)
官網的解釋是 
    Returns the index (position) of str in the str1, str2, str3, ... list. Returns 0 if str is not found.
 
而如果你要達成前面所說的目的的話,你可以這樣下你的 SQL
SELECT * FROM Event Order By FIELD( Priority, 'High', 'Normal', 'Low')
為何這樣可以達到目的呢? 因為使用 Field 的時候,它會把 Priority 帶入,並且去比對第二個以後的參數,並回傳該參數的索引 (位置)
 
所以,如果你的資料是 High,它就會回傳 1,如果是 Low 就回傳 3。當然,如果對應不到的時候,它會回傳 0。這點需要注意,避免發生不預期的結果。
Facebook 討論區載入中...
資料夾 :
標籤 :
發表時間 :
2013-10-18 22:49:13
觀看數 :
7,370
發表人 :
Kuann Hung
部門 :
老洪的 IT 學習系統
QR Code :