2016-10-19 15 views
1

私はフルテキスト検索のための簡単なクエリを持っています。データはHTMLフォーム入力から得られます。もし文のチェックやarray_key_existsの3つの入力をすべて満たしてからすべての文字列を連結したが、誰かが最初または2番目の入力を満たさなかった場合、WHERE部分はWHERE AND contract = $varなのでANDは必要ありません。どのように私はこれを解決することができます私の問題の解決策は何ですか? ANDが必要な場合は、クエリ文字列に追加するだけで、必要がない場合は追加しないでください。if文とのSQL文字列連結

$sql = "SELECT 
       slug, 
       title, 
       company, 
       location, 
       email, 
       street, 
       city, 
       phone, 
       url, 
       description, 
       image, 
       created_at 
       FROM jobs 
       WHERE "; 

    array_key_exists('paieska', $segment) ? $sql .= "MATCH(title, description) AGAINST('".urldecode($segment['paieska'])."') " : ''; 
    array_key_exists('darbo-laikas', $segment) ? $sql .= "AND contract = '".$segment['darbo-laikas']."' " : ''; 
    array_key_exists('miestas', $segment) ? $sql .= "AND location = '".$segment['miestas']."'" : ''; 

答えて

2

最も簡単な解決策は、(if文そして、あなたの最初の$sqlAND)だけで、元の場所の文に1を追加することです。これは常に真であり、すべてのレコードを返します。

darbo-laikasが存在する場合、クエリは正しく動作する...FROM jobs WHERE 1 AND contract...になります。

$sql = "SELECT 
      slug, 
      title, 
      company, 
      location, 
      email, 
      street, 
      city, 
      phone, 
      url, 
      description, 
      image, 
      created_at 
      FROM jobs 
      WHERE 1 "; 

array_key_exists('paieska', $segment) ? $sql .= "AND MATCH(title, description) AGAINST('".urldecode($segment['paieska'])."') " : ''; 
array_key_exists('darbo-laikas', $segment) ? $sql .= "AND contract = '".$segment['darbo-laikas']."' " : ''; 
array_key_exists('miestas', $segment) ? $sql .= "AND location = '".$segment['miestas']."'" : ''; 
+0

これは、MATCHの最初の部分が他の方法で埋められていない場合にのみ機能します。SQL構文エラー – SkySonny

+0

最初の 'MATCH(タイトル、説明)' @SkySonnyの前に 'AND'を必ず追加しましたか? – FrankerZ

+0

ああ..私の悪い、私は慎重に読んでいない、すべてが完全に動作します。ありがとう! – SkySonny

0

rtrim($sql, "AND ") 

ノートを使用して( 'AND')最後の文字を削除し、実行

array_key_exists('paieska', $segment) ? $sql .= "MATCH(title, description) AGAINST('".urldecode($segment['paieska'])."') AND " : ''; 
array_key_exists('darbo-laikas', $segment) ? $sql .= "contract = '".$segment['darbo-laikas']."' AND " : ''; 
array_key_exists('miestas', $segment) ? $sql .= "location = '".$segment['miestas']."' AND " : ''; 

前にすべての最後の文でを、これを試してを追加 'AND':'AND'空白を使用しているため、rtrimは空白である必要があります

+0

これは、最後のif文とANDの両方を削除するだけでした。ありがとう! – SkySonny