2011-05-12 90 views
5

說我有一張關聯顏色的花朵圖表。是否有可能獲得鮮花名單,然後通過先訂購Yellow,然後再訂購Blue,然後訂購Red。基本上,我想指定一個值列表並按這些值排序結果。可能?根據排序要求MySQL - 按某種不是ASC或DESC的順序排列

ORDER BY CASE column 
      WHEN 'Yellow' THEN 1 
      WHEN 'Blue' THEN 2 
      WHEN 'Red' THEN 3 
     END 

回答

9

你可以使用FIND_IN_SET:

ORDER BY FIND_IN_SET(column, 'Yellow,Blue,Red') 

..或在ANSI CASE語句。在查詢中,您可以使用ORDER BY sort_order ASC

我期待您要根據動態要求對它們進行排序,而不是明確提到這三種顏色。這將使您可以靈活地管理排序順序。

2

可以在顏色表中添加一個字段sort_order,並提供價值:

+0

如何添加一列有時需要訂購時解決問題(黃色,藍色,紅色),有時(藍色,黃色,紅色),有時(紅色,黃色,藍色),... – StackOverflowNewbie 2011-05-12 07:05:23

+8

' sort_order'字段應該存儲您需要排序的層次結構。例如。 (藍,黃,紅), 藍色 - 1 黃色 - 2 紅色 - 3 當您想要排序(紅色,黃色,紅色)時,顏色值和'sort_order'藍色) 藍色 - 3 黃色 - 2 紅色 - 1 這將幫助您在不編輯php代碼的情況下修改排序順序。在更高端,您提供了一個Web配置來管理頁面中的排序順序,以便用戶/管理員想要更改順序時。這是如何在高端網站上處理的。 – 2011-05-12 08:14:47

2

我的選擇是使用FIELD(str, str1, str2, ...)函數。

返回str1,str2,str3,...列表中 中str的索引(位置)。 如果未找到str,則返回0。

所以,你可以使用返回值命令結果的列表:

ORDER BY FIELD (color, 'Yellow', 'Blue', 'Red') 

如果你想顛倒順序,只需添加DESC

相關問題