MYSQLで任意の順番に並べ替えしてみました
webプログラムを構築する場合、MYSQL(データベース)はほぼ必須です。
なぜならば、webプログラムとはデータの編集・表示を目的としており、データを蓄積するデータベースがなければ、データを保存できないためです。
先日、データの表示順番を決める際に「任意の順番で表示」というケースがありました。
通常MYSQLでの表示順番は、特定キーを「昇順(1,2,3,4)」「降順(4,3,2,1)」になります。
これを「任意(2,1,4,3)」というような、任意で決めた順番にするというものです。
最初は、そんなことできるのか?
と思いましたが、調べてみるとMYSQLでは任意ソートに対応したSQLの命令語がありました。
忘備録として記載いたします。
やりたいこと:特定キーのソートを任意の順番で並び替える
以下にサンプルのデータを記載いたします。
このデータの「gp」項目の値を使って、ソートを行います。
その際に、任意の順番(C,A,Bの順)に並べるものとします。
■表示のためのSQL文
1 |
SELECT * FROM `sort_table` |
言うは易しです。
ABC(昇順)、CBA(降順)ならば簡単ですが、CAB(任意)はどうすれば実現できるのでしょうか?
まずは、ソートについて調べました。
普通のソートのやり方
MYSQLでソートをするには、「order by」文を使用します。
例えば、ABC(昇順)に並べるには、以下のように記述します。
■表示のためのSQL文
1 |
SELECT * FROM `sort_table` ORDER BY 'GP' ASP |
このやり方では、あくまでも昇順・または降順といった、規則正しいソートしかできません。
任意に並べるには、どうすればよいのでしょうか?
任意ソートを実現する「FIELD」オプション
任意順に並べる方法を調べたところ、ORDER BY命令にはオプションでFIELDというものがあることがわかりました。
これは、特定項目のソートを任意順番に指定することができます。
実際にやってみました。
■表示のためのSQL文
1 |
SELECT * FROM `sort_table` ORDER BY FIELD(gp,'C','A','B') ASC |
FILEDを使って、任意の順番に並び替えることができました。
肝心なことは、FIELD指定にも、ASC(昇順)、DESC(降順)指定ができるということです。
また、フィールドの特定値(本例だとA,B,Cのうち、AとBだけを指定)ということもできました。
最初は「そんなことできるの?」と思いましたが、MYSQLには想定以上の機能が備わっていると感じました。