webプログラムを制作する際には、MYSQLはほぼ必須になります。
データを扱うプログラムの場合、データを保存しておくエリアが必要になるためです。
その際にきおつけることがあります。
文章以外の情報は半角英数字にして保存するということです。
なぜならば、日本語は文字コードによって変換が異なり、場合によっては誤動作の原因になるからです。
名前、住所、コメントといった日本語項目は日本語で保存せざるを得ません。
でも、ラジオボタン等の選択入力項目は半角英数字で保存が望ましいのです。
半角英数字ならば、どのような文字コードでも文字化けしないため誤動作しにくいからです。
というような事情で私は、可能な限り半角英数字保存しています。
MYSQLからデータを取り出す場合は、取り出した後にPHP等で日本語に変換していました。
でもふと思いました。
MYSQLから読みだした時点で日本語に変換されてると使いやすいかも
ということで、半角英数字項目をMYSQLで日本語に置き換える方法を調べました。
やりたいこと
やりたいことは、以下のようにラジオボタンの値を「1,2,3」としてMYSQLに保存しています。
これをMYSQLから読み出す場合に、1→赤 2→青 3→黄 として読み込みします。
今回の検証データ
今回の検証用に以下のデータを作成しました。
シーケンス番号と、色コードの2種類のみのレコードです。
普通にMYSQLからデータを読み込んだ場合
まずは普通にデータを呼び出した場合です。
以下のSQL文を実行すると、当たり前ですが数字のみで取り出されます。
実行したSQL文
SELECT no, color FROM color_select
SQL文実行結果
SQL文でcase when 構文を使用すれば実現できました
プログラム側で変換する方法を考えた場合、数字の1ならば赤、2ならば青というように、「比較判断」で変換します。
具体的には、IF文、SWITCH文などです。
このような比較判断をSQL文上でもできることがわかりました。
それがcase when構文です。
論より証拠。
次のようにやったら、日本語にして取り出せました。
実行したSQL文
SELECT no, color, (case color when 1 then '赤' when 2 then '青' when 3 then '黄' else '該当なし' END) as color_name FROM color_select
SQL文実行結果
case when 構文の解説
case when ってどんな構文なの?
ちょっととっつきにくい。
所見ではそんな感じがしましたが、よくよく見ると「SWITCH文」に似ています。
ただ書き方が異なるだけでした。
実際に上記の例を次のように書き換えるとわかりやすいです。
SELECT no, color, (
case color
when 1 then '赤'
when 2 then '青'
when 3 then '黄'
else '該当なし'
END
) as color_name FROM color_select
以下のように読み替えると何となくswitch文になります。
case → switch
when → case
else → default
ちなみに、case when構文は次のようにも書けます
case when構文は、switch文に似ているといいましたが、if文に寄せることもできます。
次のような書き方をするとif分に似てきます。
SELECT no, color, (
case
when color=1 then '赤'
when color=2 then '青'
when color=3 then '黄'
else '該当なし'
END) as color_name FROM color_select
比較処理をwhenごと記述できます。
if else if の書き方に似ています。
感の良い方ならば気づかれると思いますが、今回は項目「color」だけを比較判定していますが、この書き方ならば、複数項目を比較判定できます。
なにはともあれ、SQL文で分岐処理ができるのは便利です。
今回は難しいと思っていましたがあっさりできました
たいていの場合、問題を解決する方法を探す→試す→うまくいかない→試行錯誤→再度試す→うまくいくまで繰り返す のループになります。
しかし今回は、1発で動きました。
感覚的にはswitch文を書くようなものなので、プログラム慣れしている場合は難易度が低い事象でした。
要は知らなかったということだけでした。
改めて、ググって調べるとは大事だと感じました。
本記事がお役に立てば幸いです。