質問: MySQLについて教えてください。 下記のようなテーブルがあります。 テーブル名:tblname int(11) varchar(50) varchar(50) ---------------------------------------------------- no name kana ---------------------------------------------------- 1 山田 ヤマダ 2 金田 カネダ 3 合田 ゴウダ 4 小田 オダ HTMLのページにカ行というボタンがあってそれを押すとこの中から金田と合田を抽出したいのですが下記のようなSQL文以外にやり方があるでしょうか? select * from tblname where name.kana like 'カ%' or name.kana like 'キ%' or name.kana like 'ク%' or name.kana like 'ケ%' or name.kana like 'コ%' or name.kana like 'ガ%' or name.kana like 'ギ%' or name.kana like 'グ%' or name.kana like 'ゲ%' or name.kana like 'ゴ%' or name.kana like 'キャ%' or name.kana like 'キュ%' or name.kana like 'キョ%' これだとカ行以外にもア行・サ行・・・と続き大量のSQL文を書かなくてはいけないのでもし他に効率的なやり方があれば教えてください。 よろしくお願いします。
回答: MYSQL 4.1以上ならサブクエリを使う方法があります。 1. Create Index 2. select in http://dev.mysql.com/doc/refman/4.1/ja/any-in-some-subqueries.ht... 各あ~わ行の検索対象用のテーブルを作る create table kanamap ( index(kanaretu char(1)), kanachar char(2) ); 例: ア ア ア イ ア ウ ・・ カ ガ 検索 select * from tblname where substring(kana,1,1) in (select kanachar from kanamap where kanaretu='カ') select * from tblname where substring(kana,1,1) in (select kanachar from kanamap where kanaretu in ( 'カ','キ','タ') ) ※:実際にコードを実行していないので間違った文法が あるかもしれません。 件数が多い場合1.でtblnameのkanaの1文字目の索引を作成 すると早くなるかもしれない。 create index tblkana_kana_idx on tblname ( kana(1) )