こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

phpで複数の検索語を検索対象にしたい

環境: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>";
}

?>

投稿日時 - 2012-06-20 01:05:23

QNo.7543895

困ってます

質問者が選んだベストアンサー

http://blog.olivesystem.com/824.html

投稿日時 - 2012-06-20 01:32:52

お礼

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

投稿日時 - 2012-06-21 14:52:44

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

こんな感じですね

<?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>

投稿日時 - 2012-06-20 06:27:57

お礼

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

投稿日時 - 2012-06-21 14:55:01

ANo.2

簡単に解説

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

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

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

投稿日時 - 2012-06-20 01:42:56

お礼

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

投稿日時 - 2012-06-21 14:54:00

あなたにオススメの質問