プロが教える店舗&オフィスのセキュリティ対策術

環境:php+mysql

やりたいこと:
半角や全角スペースの入った複数の検索語を検索対象にしたいです。
例:りんご みかん で検索されたキーワード

現在のコードは以下のとおりです。。
長くなるので、検索結果数だけの処理までを書いてます。
$sql の箇所で for文など使って繰り返し処理をさせればよいのかと思い
google先生で検索しましたが、、どうにも該当しそうなサイトが見つからず
アドバイスいただきたく質問させていただきました。


単語1つの場合だけ検索結果が正しく動きますが、
現在は、検索フォームに「りんご みかん」と入れると 検索結果ゼロになります。
これはこれで正しいのですが、、
希望は「りんご みかん」と入れると りんごとみかんを含む検索をしてほしい
と考えてます。

<?php
$keywords = $_GET["key"];

//検索キーワードのデータが何件あるか?

$sql="select * from item where title like '%".$keywords."%' or Description like '%".$keywords."%' or category like '%".$keywords."%' ";
$datas = mysql_query($sql , $db );
$num = mysql_num_rows($datas);
echo "検索結果は "."<span style=\"font-size:30px;\">".$num."</span>"."件です。<br>";
}

?>

A 回答 (3件)

    • good
    • 0
この回答へのお礼

参考サイトありがとうございました。

お礼日時:2012/06/21 14:52

こんな感じですね



<?PHP
if(isset($_GET["key"]) and $_GET["key"]!==""){
$sql="select count(*) as count from item where 0";
$pattern="/[  ]+/";
$keywords = preg_split($pattern,$_GET["key"]);
foreach($keywords as $val){
$val=mysql_real_escape_string($val);
$sql.=" or title like '%".$val."%'";
$sql.=" or Description like '%".$val."%'";
$sql.=" or category like '%".$val."%'";
}
$res=mysql_query($sql);
$data = mysql_fetch_array($res,MYSQL_ASSOC);
echo "検索結果は ".$data["count"]."件です。<br>";
}
?>
<form>
<input type="text" name="key">
<input type="submit" value="search!">
</form>
    • good
    • 0
この回答へのお礼

記述いただき助かります!
実際のphpで試してみます。ご回答ありがとうございます。

お礼日時:2012/06/21 14:55

簡単に解説



半角又は全角空白毎に
キーワードを配列に格納

半角又は全角空白が連続している場合を考慮しておく

配列に入れたキーワード分
Where文としてor連結する
※複数項目ある場合は、
 項目を連結したものにlike文を
 入れるか、書かれてるように
 項目数分like文をorで連結
    • good
    • 0
この回答へのお礼

処理の考え方を教えていただきありがとうございます。
他の方が教えて頂いたサイトやサンプルにて考慮して作ってみます。

お礼日時:2012/06/21 14:54

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

このQ&Aを見た人はこんなQ&Aも見ています