お世話になります。
現在検索フォームを作成しているのですが、スペース区切りのキーワードに完全一致、且つ複数のキーワードに対応させたいのですが行き詰っています。
データ内容:
id | key|
------------
1 |食パン|
2 |カレーパン フランスパン|
3 |食パン カレーパン フランスパン|
4 |パン カレーパン|
スペースで区切られたキーワードに一致する場合のみ検索結果に表示したいのです。
そこで、下記のコードを試しましたがいずれも希望の動作はしませんでした…。
SELECT * FROM `TEST` WHERE key like "パン" ⇒ どれもヒットせず
SELECT * FROM `TEST` WHERE key like "%パン%" ⇒ すべてヒット
複数検索:
SELECT * FROM `TEST` WHERE key like "%パン%" AND tag like "%フランスパン%" ⇒ id=3もヒットしてしまう(id=4だけヒットさせたい)
SELECT * FROM `TEST` WHERE key like "パン" AND tag like "フランスパン" ⇒ ヒットなし
スペース区切りのキーワードごとの複数検索の方法があればご教授頂けますと幸いです。
よろしくお願いいたします。
検索キーワードに区切り文字であるスペースを含めて、key項目の最初と最後の項目が検索できるようにkey項目にスペースを付け加えてやればよいのではないでしょうか。
SELECT * FROM `TEST` WHERE ( ' ' + key + ' ' like '% パン %' AND ' ' + key + ' ' like "% カレーパン %" )
その設計では任意の入力に対して適切な結果を返すのは無理です。検索機能に LIKE を使うのは筋が良くありません。なぜなら LIKE 検索では、入力された検索ワードに % が含まれていると正しく結果が返せないからです。
Apache Solr というエンタープライズでも使われている全文検索エンジンがありますので、調べてみてください。
早速のご回答ありがとうございました。
2012/11/16 15:22:23試してみたところヒット件数が「0件」となってしまいました…。
SELECT * FROM `TEST`
WHERE (
' ' + key + ' ' like '% パン %'
)
でも試してみましたがやはり0件となってしまいました…。