2016-06-30 13 views
0

特定の検索文字列をさまざまな列に検索できるクエリを作成しています。私は検索文字列を検索し、比較する必要が3列とmysql - 1つのセル内の値にconcatを使用する

マイデータベース:

manufacturer 
model 
number 

私が持っている問題は、人々が(任意の順序で)この列のそれぞれを検索するために許されるべきことです。

今、私はconcat_ws('%20',manufacturer,model,number) like '%$q%'を使用しました。それはちょっとした作品です。

のは、私は私のDBの列にこの値をしていると仮定しましょう(彼らは今あるよう、無コンマなしセパレータは - 彼らは私の読み取りDBに名称で、私は簡単にするためにここに文字として、それらを単純化):

manufacturer: A B 
model: C D E 
number: F G H 

と私は、検索する:

A B C D F H //this doesn't work. 
A C F //this does work. 

私が持っている問題は、私のすべての列は、複数の、スペースで区切られ、言葉で構成することができるということです。

各単語の各単語を任意の順番で検索するにはどうすればよいですか?

この質問は十分に願っていますので、必要に応じて詳細をお気軽にお尋ねください。

おかげ

+0

コンカットを使用する理由は何ですか? ''%string%'のようなメーカーや '%string'や '%%'のようなモデル ' –

+0

これは可能なorfderの各列を検索できる必要があるためでした。私はちょうどあなたの提案をテストしたが、それはどちらも動作しません、私は製造元のモデル番号を含む文字列で終わるので、 '製造元のモデル番号%'のようなメーカーは製造者の列にないので空ですそのような – Nick

+0

あなたは完全なSQLを投稿してくださいできますか? –

答えて

0

クエリで少し遊んでた後、私はこの作業溶液で終わります。

私は、これは同様に他の誰かのために有用である場合には、ここでそれを書くつもりだ:

$q = $_REQUEST['search']; 
$decoded = urldecode($q); 
$q_array = array_filter(explode(' ', str_replace('', ' ', $decoded))); 

$counter = 0; 
$searchTerms = ''; 

foreach ($q_array as $q) { 
    $counter++; 
    if ($counter == 1) { 
     $searchTerms .= "concat_ws(' ',manufacturer,model,number) like '%$q%'"; 
    } else { 
     $searchTerms .= "and concat_ws(' ',manufacturer,model,number) like '%$q%'"; 
    } 
} 



$first_query_part = "select manufacturer, model, number from table where ";  
$sql_res = $first_query_part . $searchTerms; 

そして、この作品。

基本的には、検索した各単語を分割して配列にしてから、単語を数えて、検索した単語ごとにconcat_ws(' ',manufacturer,model,number) like '%$q%'";を追加します。

関連する問題