質問ばかりおおくなってしまって申し訳ないのですが

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

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/07/12 10:55:11
  • 終了:2012/07/12 14:08:01

ベストアンサー

id:jirepo No.1

jirepo回答回数30ベストアンサー獲得回数62012/07/12 12:13:05

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

$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検索にならないとおもいます。

他3件のコメントを見る
id:ken3memo

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

2012/07/12 13:53:50
id:yamamoto170

詳しい解説ありがとうございます
具体的にわかりやすかったです
今現在、検索できています。ありがとうございました

2012/07/12 14:10:37
  • id:yamamoto170
    以下がそのプログラムです。

    //キーワード検索のとき
    //キーワードからエスケープ文字を取り除きます
    $keyword = stripcslashes($keyword);
    //キーワードの前後のスペースを取り除きます
    $keyword = trim($keyword);
    //全角スペースの半角変換と半角カナの全角変換を行います
    $keyword = mb_convert_kana($keyword, "sKV", "EUC-JP");
    //キーワードをカンマかスペースで分解して配列に代入します
    if(!strrchr($keyword, " ")){
    //キーワードに半角スペースが含まれていないとき
    $keyword = str_replace("、", ",", $keyword);
    $keyword = str_replace(",", ",", $keyword);
    $arykey = explode(",", $keyword);
    $tmpkey = "Or";

    }
    else{
    //キーワードに半角スペースが含まれているとき
    $arykey = explode(" ", $keyword);
    $tmpkey = "And";
    }
    //分解された各キーワードが空でないかチェックします
    for ($i = 0; $i < sizeof($arykey); $i++) {
    if (strlen($arykey[$i]) == 0) {
    //分解されたキーワードのいずれかが空のとき
    $body = "キーワードの指定が正しくありません!
    <INPUT type='button' value='ホームへ戻る'
    onclick='window.location=\"index.htm\"'>";
    print htmlheader("検索結果") . $body . htmlfooter();
    exit();
    }
    }
    //最初のキーワードを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]%\")";

    //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]%\")";

    }
    break;
  • id:yamamoto170
    sql文の追記です
    //MySQLに接続します
    $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
    //MySQL読み込み時の文字コードを設定
    mysql_query("set names ujis");
    //データベースを選択します
    $selectdb = mysql_select_db($DBNAME, $con);

    if (!isset($page)) {
    //初めて呼ばれたときは総件数を取得します
    $sql = "SELECT Count(*) AS cnt FROM baibaibukken" . $where;
    $rst = mysql_query($sql, $con);
    $col = mysql_fetch_array($rst);
    $tcnt = $col[cnt];
    mysql_free_result($rst);
    //該当件数をチェックします
    if ($tcnt == 0) {
    $body = "該当する物件はみつかりませんでした!
    <INPUT type='button' value='ホームへ戻る'
    onclick='window.location=\"index.htm\"'>";
    print htmlheader("検索結果") . $body . htmlfooter();
    exit();
    }
    //現在ページを初期設定します
    $page = 1;
    }
  • id:jirepo
    一の回答の補足です。どのように考えれば解決しやすいか、ということですが、

    (一つ目のキーワードが、どこかのフィールドに入っているか(or検索))
    and ← &tmpkey
    (二つ目のキーワードが、どこかのフィールドに入っているか(or検索))
    and ← &tmpkey
    (三つ目。。。。 以下同じ

    と考えれば、すべてのキーワードがどこかのフィールドにある、という条件になるということが解りやすくありませんか?
  • id:yamamoto170
    jirepoさん回答ありがとうございます。根本的な理解に少し近づいたと思います
    また見かけましたら、ご指導していただければありがたいです

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません