MySQLの質問です。

LIKEオプションの使い方なのですが、下記をまとめるとしたらどんな風にまとめるのが、ベストなのでしょうか?

NAME LIKE '%{$_REQUEST['text']}%' or FURIGANA LIKE '%{$_REQUEST['text']}%'

とりあえず下記の様にまとめたのですが、検索対象のフィールドが空だと検索対象にならないみたいなのですが、どうしてでしょうか?

concat(NAME,FURIGANA) LIKE '%{$_REQUEST['text']}%'

自分のパソコン内の環境だと問題ないのですが、レンタルサーバーにアップして動作確認をすると上記の症状が出てしまいます。

どなたか、教えてください。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2006/10/03 20:45:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント27pt

1つ目の質問のみですが、これ以上は余りまとめないほうがよいように思います。

concat でつなげるとたとえば、

name,furigana,text
あい,うえ,いう

な時もマッチしてしまいますし、それは予期している動作ではないはずだからです。

実行速度的にもメリットは無いはずです。

2つ目の質問(フィールドが空)についてはすいませんが分かりません。

id:black_kenchan

すいません。説明不足でした。

参照したいフィールドは、実はもっとありまして、5~6個位あります。そういう場合でもまとめずに記述した方が、良いのでしょうか?

2006/09/27 00:58:39
id:sakassann No.2

回答回数2ベストアンサー獲得回数0

ポイント27pt

なぜまとめる必要があるのでしょうか?

今回のようなSQL文なら、そのままで大丈夫だと思います。

また、black_kenchan さんのまとめ方だと、問題がありますよ。

極端な例になりますが、

 NAME に 「味吉」

 FURIGANA に 「良太」

という風にデータが入っていた場合、

検索語句として、「吉良」と入力すると、

そんなデータは存在しないのに、検索にヒットしてしまいます。

id:black_kenchan

すいません。

確かに2つのフィールドの参照だと上記のでもそんなに問題ないのですが、実は参照したいフィールドが5~6個位あります。

そういう場合でも、繰り返し記述したほうが良いのでしょうか?

2006/09/27 00:56:27
id:b-wind No.3

回答回数3344ベストアンサー獲得回数440

ポイント26pt

フィールドが5~6であってもまとめるメリットはSQLが少しばかり見やすくなる程度で、デメリットが大きいと思います。

まとめるといっても検索結果に差がある以上意味が変わってしまっているので、後々のメンテナンス時に問題になるだけだと思います。

繰り返しますが、該当のSQLでは性能上のメリットはありません。

id:kurukuru-neko No.4

回答回数1844ベストアンサー獲得回数155

ポイント10pt

目的が不明ですが、全文検索のような使い方だと

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません