如何在SQL中找到哪些数据记录?

时间:2016-08-17 13:43:55

标签: php sql

我正在进行搜索,尝试查找具有指定公司名称和职位名称的联系人作为WHERE参数。有时不会与指定的职位和公司有任何联系。当我使用公司名称集时,如何才能找到未找到的结果?这真的很难解释......

示例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;
     }
}

2 个答案:

答案 0 :(得分:0)

翻转WHERE条件,查找与您现有条件不符的内容。喜欢这个

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

答案 1 :(得分:0)

一种方法是切换逻辑,正如Gareth指出的那样。另一个是使用NOT

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

请注意:这两种方法都不包括NULL值。因此,如果company_namecontact_positionNULL,那么这两种方法都不会返回行(NULL比较返回NULL,这被视为false)。