ご質問にあるレコードを見ると、A_nameカラムに入っているのは$key1のみで、A_Tagカラムに入っているのは$key2のように見受けられます。
したがってSQL文は次のようになるのではありませんか。
select * from table_A where A_name like '%{$key1}%' and A_Tag like '%{$key2}%';
もしA_nameカラムには$key1も$key2も入っている、A_Tagカラムには$key1も$key2も入っているという状況でしたら、それはテーブルの設計が悪いです。
データベース構築では、概念設計、論理設計、物理設計の3段階の手順を踏んで設計を行いますが、論理設計の段階できちんと正規化ができていないといけません。まず、A_nameとA_Tagの役割を明確に分解する第1正規形ができていないといけません。
http://gihyo.jp/dev/feature/01/database/0001
確実に効率は悪いのですが、a_nameとa_tagを文字列結合して、結合文字列をlikeで検索したらどうですか。
もちろん文字列結合時にはnullを考慮しないといけませんが。
ご質問の主旨を誤解していたかもしれないので、あらたに回答を起こしました。
1つの商品(アイテム)に対して複数のタグを入力・登録・検索したいというご要望であれば、次のように正規化(1つ1つのタグに分解)を行い、テーブルを分割するというのが基本です。インデックスを作成したとしてもlike演算子を使うのは効率が悪くなるので、A_idでリレーションを張ります。
A_id | Name |
---|---|
1 | 白州 |
2 | 山崎 |
3 | 余市 |
4 | 宮城峡 |
B_id | A_id | Tag |
---|---|---|
1 | 1 | サントリー |
2 | 1 | 長野 |
3 | 2 | サントリー |
4 | 2 | 大阪 |
5 | 3 | ニッカ |
6 | 3 | 北海道 |
7 | 4 | ニッカ |
8 | 4 | 仙台 |
タグを検索するためのSQL文は次のようになります。
SELECT * FROM table_B JOIN table_A ON tableB.A_id=tableB.A_id WHERE tableB.Tag='{$key1}' OR tableB.Tag='{$key2}';
もしタグを分割しないでそのまま1つのカラム(A_Tag)に登録して検索を行いたいということであれば、日本語全文検索技術を導入する必要があります。(UTF-8を使っていればFullTextインデックスは適用可能ですが、4文字以下は検索されないという制約があります)
MySQLであれば、sennaを導入することが多いです。
http://qwik.jp/senna/FrontPageJ.html
日本語の全文検索は遅いハズです。
MySQL SennaでNGRAMかmecabを使うと速いです。
効率という点ではindexの貼り方も確か意味が合ったはず。
http://labs.unoh.net/2007/06/mysql5.html
と思いましたがMySQL5からは適時、indexを組み合わせて使ってくれるようです。
極端な話し全てのカラムにindexを貼っておけばOK。
心配ならEXPLAINを使って検証してみてください。