人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

質問ばかりおおくなってしまって申し訳ないのですが
MysqlのDBをPHPで検索条件絞込み方法についてご指導おねがいできればと思い質問させていただきます
この条件絞込みでどうしてもANDで絞り込んだ検索結果になりません。
どのように考えれば解決しやすいか、また解決方法をお教えてください
よろしくお願いします。
コメント欄にプログラムを掲載します

●質問者: yamamoto170
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● jirepo
ベストアンサー

キーワードを分解するロジックまでは確認していませんが、

$where = " WHERE (jyusyo Like \"%$arykey[0]%\")OR (comment Like \"%$arykey[0]%\")OR (sale Like \"%$arykey[0]%\")OR (setubi Like \"%$arykey[0]%\")OR (kouzou Like \"%$arykey[0]%\")OR (sikiti Like \"%$arykey[0]%\")OR (moyorieki Like \"%$arykey[0]%\")OR (madori Like \"%$arykey[0]%\")";



$where = " WHERE ( (jyusyo Like \"%$arykey[0]%\")OR (comment Like \"%$arykey[0]%\")OR (sale Like \"%$arykey[0]%\")OR (setubi Like \"%$arykey[0]%\")OR (kouzou Like \"%$arykey[0]%\")OR (sikiti Like \"%$arykey[0]%\")OR (moyorieki Like \"%$arykey[0]%\")OR (madori Like \"%$arykey[0]%\") )";

というように、&tmpkeyでつなぐキーワード全体をもうひとつの()でくくらないと
and検索にならないとおもいます。


yamamoto170さんのコメント
うまく理解できないのですが、キーワード1つめにも&tmpkeyでつなぐキーワード全体をくくらないと いけないのか分かりません キーワード2つめ以降をキーワード全体を()でくくるというのは、なんとなく分かるぐらいですが もう少し説明してもらえませんか、もしくはどこか、そのような事がわかるサイトはありませんか?

yamamoto170さんのコメント
AND検索できるようになりましたありがとうございます 実際結果が出たことでなんとなく理解できたような感じです キーワード1のすべての結果をandするいう事でしょうか 違うかもしれませんが壁にぶち当たるまではその理解で自分は行くしかないようです 本当にありがとうございます

ken3memoさんのコメント
キーワードを [横浜 川崎] と セットすると、 ()で囲わない、修正前だと //最初のキーワードをWHERE句に追加します $where = " WHERE (jyusyo Like \"%$arykey[0]%\")OR (comment Like \"%$arykey[0]%\")OR (sale Like \"%$arykey[0]%\")OR (setubi Like \"%$arykey[0]%\")OR (kouzou Like \"%$arykey[0]%\")OR (sikiti Like \"%$arykey[0]%\")OR (moyorieki Like \"%$arykey[0]%\")OR (madori Like \"%$arykey[0]%\")"; で WHERE (jyusyo Like "%横浜%")OR (comment Like "%横浜%")OR (sale Like "%横浜%")OR (setubi Like "%横浜%")OR (kouzou Like "%横浜%")OR (sikiti Like "%横浜%")OR (moyorieki Like "%横浜%")OR (madori Like "%横浜%") が作成されて、(※ORの前にスペースが無いのが気になるけどMySQL様がなんとかしてくれるのだろうキット) $tmpkey = "And"; なので、 //2つめ以降のキーワードをWHERE句に追加します for ($i = 1; $i < sizeof($arykey); $i++) { $where .= " " . $tmpkey; $where .= " (jyusyo Like \"%$arykey[$i]%\")OR (comment Like \"%$arykey[$i]%\")OR (setubi Like \"%$arykey[$i]%\")OR (sale Like \"%$arykey[$i]%\")OR (kouzou Like \"%$arykey[$i]%\")OR (sikiti Like \"%$arykey[$i]%\")OR (moyorieki Like \"%$arykey[$i]%\")OR (madori Like \"%$arykey[$i]%\")"; } で、 $where .= " " . $tmpkey; ここで " And" が 追加され WHERE (jyusyo Like "%横浜%")OR (comment Like "%横浜%")OR (sale Like "%横浜%")OR (setubi Like "%横浜%")OR (kouzou Like "%横浜%")OR (sikiti Like "%横浜%")OR (moyorieki Like "%横浜%")OR (madori Like "%横浜%") And となる、 一番後ろにまず注目 OR (moyorieki Like "%横浜%")OR (madori Like "%横浜%") And ここに、 //2つめ以降のキーワードをWHERE句に追加します のループの中、 $where .= " (jyusyo Like \"%$arykey[$i]%\")OR (comment Like \"%$arykey[$i]%\")OR (setubi Like \"%$arykey[$i]%\")OR (sale Like \"%$arykey[$i]%\")OR (kouzou Like \"%$arykey[$i]%\")OR (sikiti Like \"%$arykey[$i]%\")OR (moyorieki Like \"%$arykey[$i]%\")OR (madori Like \"%$arykey[$i]%\")"; で追加すると 頭の $where .= " (jyusyo Like \"%$arykey[$i]%\")OR だけ見てもらいたいのですが、 ここで、 (jyusyo Like "川崎")OR が追加されると OR (moyorieki Like "%横浜%")OR (madori Like "%横浜%") And (jyusyo Like "川崎")OR となってしまい、 (madori Like "%横浜%") And (jyusyo Like "川崎") が And 条件として mySQLに渡されてしまうから、 (横浜..or or or .) And (川崎..or or or.) にしたいので、大きなキーワード単位の()が分解したキーワードごとに必要なのでは? と予想しますが.... んっ? >> <b>≫キーワード2つめ以降をキーワード全体を()でくくるというのは、なんとなく分かるぐらいですが</b> << 二つ目だけ囲っても、 OR (madori Like "%横浜%") And ( (jyusyo Like "川崎")OR .... (madori Like "%川崎%") ) となってしまい、 最後の(madori Like "%横浜%") と And 条件で調べてしまうのかなぁ。 現在、キーワード1つの検索は動いているのですか? (※2つキーワードを入れると動かないけど、1つなら動くのか? それとも、1つでも動かないのか?) MySQL,PHP素人のコメントですが、何かの参考となれば幸いです。 (※※外していたらスミマセン....)

ken3memoさんのコメント
あっ、解決されたんですね。 コメント欄を汚してすみませんでした。

yamamoto170さんのコメント
詳しい解説ありがとうございます 具体的にわかりやすかったです 今現在、検索できています。ありがとうございました
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ