0

タイトルが少しあいまいで、他の半関連の質問を彷彿とさせる場合は申し訳ありません)、問題は実際には非常に単純です。

のような1文字の値を持つことができるVARCHAR列がありますM,G,D and S。結果をアルファベット順に並べ替えると、この例では次の順序で表示されますD-G-M-S。ただし、次の順序で行を表示する必要があります。

G-D-M-S

クエリ内でこれを実行する方法はありますか?PHPで結果をカスタムソートできることは知っていますが、可能であればクエリ内でソートしたいと思います。この例では、結果の「G」と「D」の順序を切り替える必要があります。その単純な問題の解決策で、どのような答えでも十分です。

4

4 に答える 4

4

カスタムcaseステートメントを書くことができます:

Select *
from your_table
order by
   case your_column 
     when 'G' then 1
     when 'D' then 2
     when 'M' then 3
     when 'S' then 4
   end

また、別の解決策は、物理レベルで照合を変更することです。

8ビット文字セットに単純な照合を追加してデフォルトの並べ替えを変更する

于 2013-03-20T13:14:28.057 に答える
1

私がすることは、2列の一時テーブルまたは永続テーブルを定義することです。

letter  |  ordernum
-------------------
G       |  1
D       |  2
M       |  3
S       |  4

次に、既存のテーブルをフィールド「letter」の新しいテーブルに結合し、新しいテーブル「ordernum」フィールドを使用して並べ替えを行います...

于 2013-03-20T13:14:32.940 に答える
1
SELECT
    if(columnname='G',1,
        if(columnname='D',2,
            if(columnname='M',3,
                if(columnname='S',4,0
    )))) SortOrder
FROM tablename
ORDER BY
    SortOrder ASC
于 2013-03-20T13:14:43.923 に答える
1
    Select col from table 
   order by case when col = 'G' then 1 
   when col = 'D' then 2
   when col = 'M' then 3 
   case when col = 'S' then 4 else 5 end ;
于 2013-03-20T13:15:40.393 に答える