使用mysql订购一个列名

使用mysql订购一个列名,mysql,Mysql,我刚刚进入了一个名为CodeFights的网站,它给开发者带来了挑战。我想请stack overflow的可爱的朋友们,也许可以通过MySql挑战引导我朝着正确的方向前进。。 首先,它给出了一个描述,如果这对你有用的话,也许你可以帮我解决这个问题,因为打字会花太长时间 如果不是,我对50%的问题的回答是: 从书本章节中选择章节名称 它还要求你按升序排列章节名称,我已经试过了 按章节号ASC从图书章节顺序中选择章节名称; 但是运气不好, 他们只想从书的章节和章节名称中选一列 有点难堪 一种方法是将

我刚刚进入了一个名为CodeFights的网站,它给开发者带来了挑战。我想请stack overflow的可爱的朋友们,也许可以通过MySql挑战引导我朝着正确的方向前进。。 首先,它给出了一个描述,如果这对你有用的话,也许你可以帮我解决这个问题,因为打字会花太长时间

如果不是,我对50%的问题的回答是: 从书本章节中选择章节名称

它还要求你按升序排列章节名称,我已经试过了 按章节号ASC从图书章节顺序中选择章节名称; 但是运气不好, 他们只想从书的章节和章节名称中选一列


有点难堪

一种方法是将罗马数字转换为阿拉伯语(以10为基数)表示

但这并不是真的必要

一系列简单的字符串替换就可以了

就罗马数字“数字”的排名而言

如果我们用四个重复字符的表示替换这些情况。。。i、 e.
IV
->
iii
IX
->
VIIII
,等等。然后获得可以排序的字符串值

因此,我们可以使用类似以下内容的ORDER BY子句:

  ORDER BY REPLACE(
             REPLACE(
               REPLACE(
                 REPLACE(
                   REPLACE(
                     REPLACE(
                       UPPER( chapter_num ) 
                     ,'C','Z')
                   ,'L','Y')
                 ,'IV','IIII')
               ,'IX','VIIII')
             ,'XY','XXXX')
           ,'XZ','YXXXX')
这适用于最大为399的罗马数字值。那就是我们遇到“D”的时候

要处理400或更大的数字,我们可以在排序序列中将
'D'
替换为字符“大于”
'Z'
,例如左方括号
'['
。我们可以将
'M'
替换为右方括号
']
。并对特殊情况下的
'CD'
'CM'
进行适当的更换

我们需要验证字符串的排序顺序是否正确:

    'I' < 'V' < 'X' < 'Y' < 'Z' < '[' < ']'
    IV
    IX
    XL
    XC
  ORDER BY REPLACE(
             REPLACE(
               REPLACE(
                 REPLACE(
                   REPLACE(
                     REPLACE(
                       UPPER( chapter_num ) 
                     ,'C','Z')
                   ,'L','Y')
                 ,'IV','IIII')
               ,'IX','VIIII')
             ,'XY','XXXX')
           ,'XZ','YXXXX')
    'I' < 'V' < 'X' < 'Y' < 'Z' < '[' < ']'
  ORDER BY REPLACE(
             REPLACE(
               REPLACE(
                 REPLACE(
                   REPLACE(
                     REPLACE(
                       REPLACE(
                         REPLACE(
                           REPLACE(
                             REPLACE(
                               UPPER( chapter_num )
                             ,'M',']')
                           ,'D','[')
                         ,'C','Z')
                       ,'L','Y')
                     ,'IV','IIII')
                   ,'IX','VIIII')
                 ,'XY','XXXX')
               ,'XZ','YXXXX')
             ,'Z[','ZZZZ')
           ,'Z]','[ZZZZ')