電子書籍の厳選無料作品が豊富!

php とmysqlの環境で作ってます。
以前、教えていただいた http://blog.olivesystem.com/824.html
のサイトを参考に検索キーワードをテーブル上の複数の項目にまたがって検索したい
と考え以下のように書いてみましたが、、エラーとなってしまうので、、、
アドバイスいただければと考えております。

・実現したいこと
検索窓に 半角や全角で間を空けた入力キーワードをand検索とし
テーブル上の複数の項目を参照して検索結果を得たい

例:
「バナナ りんご 千」で検索された場合

テーブルの内容
namesetumeisanchi
バナナ長い東京
りんご丸い青森
スイカ 丸い千葉

このテーブルの3つの項目を参照して検索し、実現したいことが正しく動けば。。
検索結果数 3件 となる。
理由:nameに2件 sanchiに1件 該当キーワードが存在するため


・phpの内容

*getでキーワードを取得している状態以下を書いてます。
$keywd がGETで取得したキーワードが代入されます。
試しに2つ項目で動かないか?!書いてみた状態です。

$query = "SELECT * FROM item WHERE";
if($keywd){
$str = array(" "," ", " and ", " AND ");
$keywd = str_replace($str, " ", $keywd);
if(stristr($keywd, " ")){//複数キーワードでの検索
$ex = explode(" ", $keywd);
$count = count($ex);
for($i=0; $i<$count; $i++){
if($i!="0"){
$keyand = $keyand." and";
$keyor = $keyor." or";
}
$keyand = $keyand." name LIKE '%{$ex[$i]}%'";
$keyor = $keyor." sanchi LIKE '%{$ex[$i]}%'";
$sql = $keyand.$keyor;

echo $sql;//内容確認

}
}else{//単体キーワードでの検索
$sql = " name LIKE '%{$keywd}%'";
}
}

$query1 = $query.$sql;
$result = mysql_query($query1, $db );


$num = mysql_num_rows($result);
echo "検索結果は "."<span style=\"font-size:30px;\">".$num."</span>"."件です。<br>"; ←ここがline111となります。


・表示されたエラー
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/users/xxxx/result.php on line 111

・echoで確認した内容
「ソーラ o」で検索した状態

name LIKE '%ソーラ%' Description LIKE '%ソーラ%' name LIKE '%ソーラ%' and name LIKE '%o%' Description LIKE '%ソーラ%' or Description LIKE '%o%'


よろしくお願いします。

A 回答 (1件)

>name LIKE '%ソーラ%' Description LIKE '%ソーラ%' name LIKE '%ソーラ%' and name LIKE '%o%'


>Description LIKE '%ソーラ%' or Description LIKE '%o%'

これを見れば一目瞭然だと思いますが、条件が正しく作成できていません。なのでmysql_queryの時点で戻り値がfalseのハズです。なぜチェックしていないのでしょうか(デバッグ時ならor dieで止めるだけでもいいのに)。

>$sql = $keyand.$keyor;

and条件で繋いだ条件(name)とor条件で繋いだ条件(Description)は、どう繋ぐのですか?それによって(たとえばand条件なら)

$sql = '(' . $keyand . ')and(' . $keyor . ')';

などと書かないといけません。
    • good
    • 0
この回答へのお礼

たすかりました!
アドバイスありがとうございます。

お礼日時:2012/07/05 20:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!