3

我有以下查询:

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

稀有度由以下关键字组成:神话、稀有、罕见、普通

目前它是按字母排序的,所以它被排序为普通、神话、稀有、罕见。

如何对稀有度进行排序,使其按以下顺序显示?

神话、稀有、罕见、常见

4

2 回答 2

1

就这么简单:

SELECT 
    *
FROM
    `Magic The Gathering`
WHERE
    `set` =  'Magic 2013'
ORDER BY
    FIELD(`rarity`, 'Mythic', 'Rare', 'Uncoomon', 'Common') ASC
LIMIT
    500
于 2013-08-17T20:24:48.080 回答
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'),然后您可以使用原始查询。排序顺序将按字符串在枚举中的序号位置,而不是按字母顺序。

于 2013-08-17T20:29:04.447 回答