たとえば住所録なんかを作るような場合、表示側であ行~わ行で名前の一覧を表示分けしたいとする。
まあ、DBにデータを登録するときに、その何行なのかというのもデータで持っていれば特に問題はないのだろうけど、そういうカラムが(うっかり)作成されていなくて、名前とふりがなだけが入っていたら、ふりがなの先頭の文字からその名前が何行に属するのかを見ることになると思う。
ではここで、名前の先頭が「か」の名前のデータを取得したいとする。加賀まりこ(かがまりこ)とか鹿賀丈史(かがたけし)とかカート・コバーン(かーとこばーん)とかガイル(ソニックブームの人)とかが該当しますね。
SELECT * FROM users WHERE LEFT(kana,1) LIKE '%か%'
SQL文はこんな感じで大丈夫。kanaってのは、ここではふりがなが入っているカラムです。LEFT(kana,1)というのは、kanaのカラムに入っているデータの左から1文字を取得するものです。当然LEFT(kana,2)なら2文字取ってくる。
さて、上記のSQL文だとふりがなの先頭の文字が「か」の人のデータを取ってきます。つまり加賀まりこさん、鹿賀丈史さん、カート・コバーンさんのデータを取ってくる。ただし、ガイルは取ってこない。ソニックブームの人とか書いてるけどふりがなは「がいる」ですので、先頭が「そ」だからいけないんじゃねーのってわけじゃない。
まあ、当然と言うべきか、「か」と「が」は違う文字なので、これでは先頭が「が」の人は引っかからない。
SQL文にORを書いても良いのだけど、それもちょっとだるい。そんなときはどうするか。
実はカラムの照合順序をutf8_unicode_ciってのにすると、’%か%’と書くだけで「が」の方も取ってきてくれる。それどころかカタカナの「カ」とかも取ってきてくれるらしい。カートコバーンとかも、ふりがなの方にそのままカタカナで名前を入れても何とかなる。
これは知っとくと意外と便利だと思う。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。