2013-08-17 99 views
3

我有以下查詢:如何按任意關鍵字排序?

SELECT 
     * 
    FROM 
     `Magic The Gathering` 
    WHERE 
     `set` = 'Magic 2013' 
    ORDER BY 
     `rarity` ASC 
    LIMIT 
     500 

稀有度由以下關鍵字:神話,稀有,稀有,普通

目前,它排序alphbetically,所以它歸類爲常見,神話,稀有,罕見的。

我如何分類稀有度,以便按以下順序顯示?

神話,稀有,稀有,普通

回答

1

可以使用MySQL中FIELD()函數返回一個整數,這是做這個特設匹配字符串在列表中的位置。

例子:

SELECT 
    * 
FROM 
    `Magic The Gathering` 
WHERE 
    `set` = 'Magic 2013' 
ORDER BY 
    FIELD(`rarity`, 'Mythic', 'Rare', 'Uncommon', 'Common') ASC 
LIMIT 
    500 

注回剔報價都是列標識符,而直的單引號是字符串文字。

另一種解決方案是將您的rarity列定義爲ENUM('Mythic', 'Rare', 'Uncommon', 'Common'),然後您可以使用原始查詢。排序順序將取決於枚舉中字符串的順序位置,而不是按字母順序排列。

+1

ENUM解決方案是否提供更快的查詢? – rotaercz

+0

是的,如果複合索引超過'(\'set \',稀有度)',那麼排序是基於索引順序而不是手動排序,而FIELD()解決方案必須手動排序。 –

1

它是如此簡單:

SELECT 
    * 
FROM 
    `Magic The Gathering` 
WHERE 
    `set` = 'Magic 2013' 
ORDER BY 
    FIELD(`rarity`, 'Mythic', 'Rare', 'Uncoomon', 'Common') ASC 
LIMIT 
    500