MYSQLで任意の順番に並べ替えしてみました

2020年9月2日

webプログラムを構築する場合、(データベース)はほぼ必須です。
なぜならば、webプログラムとはデータの編集・表示を目的としており、データを蓄積するデータベースがなければ、データを保存できないためです。

先日、データの表示順番を決める際に「任意の順番で表示」というケースがありました。

通常MYSQLでの表示順番は、特定キーを「昇順(1,2,3,4)」「降順(4,3,2,1)」になります。

これを「任意(2,1,4,3)」というような、任意で決めた順番にするというものです。

最初は、そんなことできるのか?
と思いましたが、調べてみるとMYSQLでは任意ソートに対応したSQLの命令語がありました。

忘備録として記載いたします。

やりたいこと:特定キーのソートを任意の順番で並び替える

以下にサンプルのデータを記載いたします。
このデータの「gp」項目の値を使って、ソートを行います。
その際に、任意の順番(C,A,Bの順)に並べるものとします。

■表示のためのSQL文

言うは易しです。
ABC(昇順)、CBA(降順)ならば簡単ですが、CAB(任意)はどうすれば実現できるのでしょうか?

まずは、ソートについて調べました。

普通のソートのやり方

MYSQLでソートをするには、「order by」文を使用します。
例えば、ABC(昇順)に並べるには、以下のように記述します。

■表示のためのSQL文

このやり方では、あくまでも昇順・または降順といった、規則正しいソートしかできません。

任意に並べるには、どうすればよいのでしょうか?

任意ソートを実現する「FIELD」オプション

任意順に並べる方法を調べたところ、ORDER BY命令にはオプションでFIELDというものがあることがわかりました。

これは、特定項目のソートを任意順番に指定することができます。
実際にやってみました。

■表示のためのSQL文

FILEDを使って、任意の順番に並び替えることができました。
肝心なことは、FIELD指定にも、ASC(昇順)、DESC(降順)指定ができるということです。

また、フィールドの特定値(本例だとA,B,Cのうち、AとBだけを指定)ということもできました。

最初は「そんなことできるの?」と思いましたが、MYSQLには想定以上の機能が備わっていると感じました。

今回のレポートは以上です。
読んでいただいてありがとうございました。


ホームページに関するお悩み事やご相談事がございましたら私どもまでご連絡ください。 鋭意ご対応申し上げます。
ホームページのご提案もさせていただいております