【问题标题】:Sorting by partial keyword match按部分关键字匹配排序
【发布时间】:2013-08-17 20:51:13
【问题描述】:

我有以下疑问:

SELECT 
        *
    FROM
        `Magic The Gathering`
    WHERE
        `set` =  'Magic 2013'
    ORDER BY
        FIELD (`rarity`, 'Mythic', 'Rare', 'Uncommon', 'Common', 'Land') ASC,
        FIELD (`type`, 'Planeswalker ', 'Creature', 'Instant', 'Sorcery', 'Enchantment', 'Artifact', 'Land') ASC
    LIMIT
        500

“类型”由多种关键字组成,例如“鹏洛客 - 阿耶尼”、“传奇神器”、“生物 - 精灵德鲁伊”等。

我如何对类型进行排序,以便根据部分匹配的关键字(例如“鹏洛客”、“生物”、“即时”、“巫术”、“附魔”、“神器”、“土地”)进行显示?

【问题讨论】:

  • 可能的重复和解决方案:stackoverflow.com/questions/8187828/…
  • 在我看来,通过引入另一个简单存储卡片类型的列来完全避开这个和其他可能的问题是一个好主意,实际上是您尝试排序的值之一开。
  • 据我所知,我无法更改数据库。

标签: mysql


【解决方案1】:

您可以通过使用 case 语句来做到这一点,例如:

Order by (case when type like '%Planeswalker%' then 1
            When ....
        end)

【讨论】:

    【解决方案2】:

    您或许可以使用CASE WHEN 来解决您的问题。

    SELECT 
            *
        FROM
            `Magic The Gathering`
        WHERE
            `set` =  'Magic 2013'
        ORDER BY
            FIELD (`rarity`, 'Mythic', 'Rare', 'Uncommon', 'Common', 'Land') ASC,
            CASE
                WHEN `type` LIKE '%Planeswalker%' THEN 1
                WHEN `type` LIKE '%Creature%' THEN 2
                WHEN `type` LIKE '%Instant%' THEN 3
                -- ...
    
            END CASE
        LIMIT
            500
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多