2016-08-17 21 views
0

私はWHEREパラメータとして特定の会社名と職種を持つ連絡先を探す検索をしています。場合によっては、指定された役職および会社との連絡がありません。私は会社名のセットを使用しているので、どの結果が見つからなかったかをどのように見つけることができますか?これは、例えばSQL文は、私はそれが理にかなっている場合、そのジョブのタイトルのいずれかの連絡先を持っていなかった企業を知りたいSQLで見つからなかったデータレコードはどのようにして見つけられますか?

SELECT * 
    FROM contacts 
WHERE company_name IN ('bbc', 'yahoo', 'some company') 
    AND contact_position 
    LIKE 'manager' 

かもしれません...

説明するのは本当に難しいのですか?

私はこれまでしてきたが、私はこれを行うためのより良い方法があると推測:

$contacts_no_inv = Contact::find_query(" 
    SELECT * 
     FROM contacts 
    WHERE {$data_search} 
     AND contact_position 
     LIKE '%{$_POST['job_title']}%' 
"); 

if ($contacts_no_inv) { 
    foreach ($contacts_no_inv as $contact_no_inv) { 
     $companies_found[] = $contact_no_inv->company_name; 
     if (!in_array($contact_no_inv->contact_id, $idArr)) { 
      $filtered_no_inv[] = $contact_no_inv; 
     } 
    } 
} 

$companies_found = array_unique($companies_found); 
$companies_found = array_filter($companies_found); 

foreach ($_POST['query'] as $query) { 
    if (!in_array(strtolower($query), array_map('strtolower', $companies_found))) { 
     if (count(explode(' ', strtolower($query))) > 1) { 
      foreach (explode(' ', $query) as $query_element) { 
       if (!in_array(strtolower($query_element), array_map('strtolower', $companies_found))) { 
        $companies_found[] = $query; 
       } 
      } 
     } 

     $companies_not_found[] = $query; 
    } 
} 
+0

これは、すべての余分なPHPコードがなくても、あなたのSQL文で完全に行うことができます。あなたのテーブル構造を投稿することは、あなたの仕事を達成するための質問を書くのを助けるでしょう。 – mituw16

答えて

0

は、既存の条件に一致しないものを見つけるために周りのあなたのWHERE状態を反転します。このように

SELECT * FROM contacts WHERE company_name NOT IN ('bbc', 'yahoo', 'some company') OR contact_position NOT LIKE 'manager'") 
+0

私はまだ発見された企業にアクセスする必要があります - これはこれらのレコードへのアクセスを除外しませんか? –

+0

両方を同時にしたいですか?もしそうなら、WHEREの目的は何ですか?すべての行を取得したいと思うようです... –

+0

400,000行があります。ユーザーが投稿した会社名と職位が見つかる行だけが必要ですが、DB上に見つかった会社も表示したいと考えています。私が掲示したコードは実際には機能します - 私はちょうどそこにSQLを使ってより良い方法があるかもしれないと思った。 –

0

Garethが指摘しているように、論理を切り替える方法があります。もう一つは、ちょうどNOTを使用することです:

SELECT c.* 
FROM contacts c 
WHERE NOT (company_name IN ('bbc', 'yahoo', 'some company') AND 
      contact_position LIKE 'manager' 
     ); 

注意の言葉:これらのメソッドの両方がNULL値を除外します。したがって、company_nameまたはcontact_positionNULLの場合、いずれの方法も行を返しません(NULLの比較はfalseを返すNULLを返します)。

関連する問題