2016-08-30 3 views
2

単語間のギャップを使用すると、検索クエリがゼロの結果を示します。複数のLIKE条件を使用して、検索クエリが期待どおりに機能しない

DB::たとえば

TABLE NAME - peoples 
----------------------------------- 
ID - forename - surname 
----------------------------------- 
1  Johny   Depp 
2  Kobe   Bryant 
3  Random   Name 
4  Mark   Zuckerberg 

etc 

問合せ:

$sqlnames="SELECT id, forename, surname FROM peoples WHERE forename LIKE '%$search_keyword%' OR surname LIKE '%$search_keyword%' LIMIT 20"; 

、iが入力しています入力で例えば:ジョニーそれが期待通りに示しています。ジョンDepp、または私が姓:Deppと入力している場合は、それも表示されます期待通りですが、完全名を入力している場合:Johny Depp、結果はゼロです。どのように私はそれを修正することができます?

申し訳ありませんが、悪い英語のため、ありがとうございました!

+0

はたぶんそこ使用する可能性がある 'とOR'? – SuperDJ

+0

私はORをWHEREで使用しています。これは悪いですか? – Tauras

+0

'SELECT id、forename、surname FROM people 'のような角かっこで括るようにしてください。(forenameと%OR検索名%LIKE'%$ search_keyword% ')LIMIT 20' – devpro

答えて

1

はあなたのクエリです。

+0

これは、ajax読み込みスクリプトに500エラーlangを与えます。 – Tauras

+0

申し訳ありませんが、私の間違いです。 – Tauras

1

は、以下のことを試してみてください。ここで

$sqlnames="SELECT id, forename, surname,concat(forename,' ',surname) as fullname FROM peoples WHERE fullname LIKE '%$search_keyword%' OR forename LIKE '%$search_keyword%' OR surname LIKE '%$search_keyword%' LIMIT 20"; 
+0

これは、ajax読み込みスクリプトに500エラーlangを与えます。 – Tauras

+0

申し訳ありませんが、私の間違いです。 – Tauras

+0

@タウラス大丈夫です:-) –

1

フルネームを検索しているときは、姓の中の「フルネーム」または姓の「フルネーム」を検索しています。だからあなたは結果を得られないのです。あなたは言葉を分割して、検索する必要があり、別の条件OR CONCAT(forename, ' ', surname) LIKE '%$search_keyword%'

1

追加

試してみてください。

$word_array = explode(" ",$search_keyword); 
$sqlnames="SELECT id, forename, surname FROM peoples WHERE"; 
$count = 0; 
foreach($word_array as $value){ 
    if($count == 0){ 
     $sqlnames .= " forname LIKE '" . $value ."'"; 
    } 
    else{ 
     $sqlnames .= " OR forname LIKE '" . $value ."'"; 
    } 
    $count = 1; 
    $sqlnames .= " OR surname LIKE '" . $value ."'";  
} 
$sqlnames .="LIMIT 20"; 
関連する問題