LIKEオプションの使い方なのですが、下記をまとめるとしたらどんな風にまとめるのが、ベストなのでしょうか?
NAME LIKE '%{$_REQUEST['text']}%' or FURIGANA LIKE '%{$_REQUEST['text']}%'
とりあえず下記の様にまとめたのですが、検索対象のフィールドが空だと検索対象にならないみたいなのですが、どうしてでしょうか?
concat(NAME,FURIGANA) LIKE '%{$_REQUEST['text']}%'
自分のパソコン内の環境だと問題ないのですが、レンタルサーバーにアップして動作確認をすると上記の症状が出てしまいます。
どなたか、教えてください。
1つ目の質問のみですが、これ以上は余りまとめないほうがよいように思います。
concat でつなげるとたとえば、
name,furigana,text あい,うえ,いう
な時もマッチしてしまいますし、それは予期している動作ではないはずだからです。
実行速度的にもメリットは無いはずです。
2つ目の質問(フィールドが空)についてはすいませんが分かりません。
なぜまとめる必要があるのでしょうか?
今回のようなSQL文なら、そのままで大丈夫だと思います。
また、black_kenchan さんのまとめ方だと、問題がありますよ。
極端な例になりますが、
NAME に 「味吉」
FURIGANA に 「良太」
という風にデータが入っていた場合、
検索語句として、「吉良」と入力すると、
そんなデータは存在しないのに、検索にヒットしてしまいます。
すいません。
確かに2つのフィールドの参照だと上記のでもそんなに問題ないのですが、実は参照したいフィールドが5~6個位あります。
そういう場合でも、繰り返し記述したほうが良いのでしょうか?
フィールドが5~6であってもまとめるメリットはSQLが少しばかり見やすくなる程度で、デメリットが大きいと思います。
まとめるといっても検索結果に差がある以上意味が変わってしまっているので、後々のメンテナンス時に問題になるだけだと思います。
繰り返しますが、該当のSQLでは性能上のメリットはありません。
目的が不明ですが、全文検索のような使い方だと
matchを使う方法があります。
http://dev.mysql.com/doc/refman/4.1/ja/fulltext-search.html
concatの仕様で、NULLが含まれる場合
全体がNULLになります。
http://dev.mysql.com/doc/refman/4.1/ja/string-functions.html
すいません。説明不足でした。
参照したいフィールドは、実はもっとありまして、5~6個位あります。そういう場合でもまとめずに記述した方が、良いのでしょうか?