2011-12-21 21 views
0

私は自分のデータベースで検索するフレーズを持っています。 "Hawthorne Heights - 壊れやすい未来"SQL検索 - 一度に1単語少ない - MySQLとPHP

これは1つの結果をもたらしますが、 "Hawthorne Heights"を検索すると結果がさらに大きくなります。

私の質問は、希望の数の結果を受け取るまで、またはそれ以上の条件が満たされない限り、検索条件を減らすことができますか?

など。初期検索

"ホーソーンハイツ - 脆弱未来"

その後、

"ホーソーンハイツ - フラジャイル"、その後

"ホーソーン・ハイツ"

その後、

"ホーソーン"

最初の検索語句は1つの単語にすることができます。その場合、1つのパスがすべて必要です。それは10語にすることもできます。

これは1つのクエリで可能ですか、それともフレーズを減らしてから再度検索しなければなりませんか...もしそうなら、どのようにフレーズを減らすのですか?

ご協力いただきありがとうございます。以下は

私は、クエリのために現在使用してコードです:

$searchTerm = trim($searchTerm); 

    $result345 = mysql_query("SELECT main_category, PRid, title, genre, imageURL, lowprice, highprice, prodcatID from PRprodINFO2 where (($title LIKE '%$searchTerm%') AND (imageURL <>'') $is_cat_id) $genre order by $order_col $asc_desc limit 2000",$db); 

$変数(例えば、$タイトル、$ is_cat_idなど)が動的ではなく、クエリには影響しません、その$の検索語どこフレーズ格納されています

+0

私はあなたのためにコードを作ることができます。 thx :) – Chandresh

+0

@Chandreshコードが追加されました。ご協力ありがとうございます –

+0

私の編集した回答を確認してください。どうも – Chandresh

答えて

0

私の理解によると、あなたのケースでは、このためのカスタムクエリを作成する必要があります。その場合は、最初に"-"、次にspace( "")の検索キーワードを分割/爆発させる必要があります。

これらの作業の最後に、6単語以下がすべて表示されます。

For example : 

your search keyword is = "Hawthorne Heights - Fragile Future" 

1) Hawthorne Heights 
2) Fragile Future. 
3) Hawthorne 
4) Heights 
5) Future 
6) Fragile 

これらのすべての単語を1つの配列にして、ループ内でクエリを作成します。 ORの状態に接続しています。あなたのクエリを1として

EDITE:

$searchterm = "Hawthorne Heights - Fragile Future"; 

$keyword = explode("-",$searchterm); 

for($i=0;$i<count($keyword);$i++){ 
    $word[] = explode(" ",trim($keyword[$i])); 
} 

for($j=0;$j<count($word);$j++){ 
    $str[] = implode(',',$word[$j]); 
} 


$strArr = explode(',',implode(',',$str)); 

$queryStr = ""; 
for($cnt = 0;$cnt<count($strArr);$cnt++){ 
    $queryStr.= "($title LIKE '%".$strArr[$cnt]."%') OR"; 
} 

$searchTerm = substr($queryStr,0,-2); 


$result345 = mysql_query("SELECT main_category, PRid, title, genre, imageURL, lowprice, highprice, prodcatID from PRprodINFO2 where (($title LIKE '%$searchterm%'OR $searchTerm) AND (imageURL <>'') $is_cat_id) $genre order by $order_col $asc_desc limit 2000",$db); 

これらのコードは、より多くの最適化を持っているかもしれませんがために急いで私は私が速いクリックし、それが何を作る.. :)

これはに役立つかもしれませんあなたがしたいことがあれば教えてください。

ありがとう。

関連する問題