2014-03-27 88 views
1

我有一個MySQL查詢時返回以下數據:Mysql - 按自定義順序嗎?

select Desc,Value from table; 

Desc  Value 
a   4 
r   3 
e   4 
j   7 
w   6 
p   6 

我想DESCR但在一個特定的順序排序(這種特殊需要JSON)

Desc  Value 
r   3 
a   4 
e   4 
j   7 
p   6 
w   6 

這是可能的?

+1

如果您想要的順序是任意的(就SQL而言),我會說這將會過於複雜,您應該嘗試使用服務器端實現語言(例如, PHP)而不是自定義排序函數更原生/通用。 –

回答

2
ORDER BY FIELD(`desc`, 'r', 'a', 'e', 'j', 'p', 'w') 

注:如果desc值與給定值不匹配,則它會先到達,因爲FIELD()將返回0

+0

太棒了!那很簡單。謝謝 – Greg

+0

好戲!剛剛學到了新東西 - 今天是美好的一天。 – Mureinik

0

這並不漂亮,但您可以通過訂購(condition) DESCDESC因爲如果條件爲真,它比如果條件爲假

SELECT 
    Desc, 
    Value 
FROM 
    Foo 
ORDER BY 
    (Desc = 'r') DESC, 
    (Desc = 'a') DESC, 
    (Desc = 'e') DESC, 
    (Desc = 'j') DESC, 
    (Desc = 'p') DESC, 
    (Desc = 'w') DESC 
0

您可以通過一個case表達式,指定訂購訂購您想要的:

SELECT `desc`, `value` 
FROM  my_table 
ORDER BY CASE `desc` WHEN 'r' THEN 1 
        WHEN 'a' THEN 2 
        WHEN 'e' THEN 3 
        WHEN 'j' THEN 4 
        WHEN 'p' THEN 5 
        WHEN 'w' THEN 6 
        ELSE 999 --for completeness sake 
      END CASE ASC