我正在进行搜索,尝试查找具有指定公司名称和职位名称的联系人作为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;
}
}
答案 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_name
或contact_position
为NULL
,那么这两种方法都不会返回行(NULL
比较返回NULL
,这被视为false)。