0

我有一个搜索 SQL 数据库的 php 表单。据说有八个表单字段,每个字段都是可选的。如果所有内容都留空,则查询将返回整个数据库。如果填写了一个字段,它将按一个字段过滤,两个它将按两个过滤,等等。在我想要搜索空条目的能力之前,我没有任何问题。例如,我想搜索客户有姓氏但没有主要电话号码的位置。我已经工作了几个小时,想不出一种简单的方法来实现这样的事情。我设想它是当您在搜索字段中键入关键字以在其他所有内容之上搜索该项目为空的位置。因此,如果我将“Smith”放入姓氏并将“NULL”放入电话号码,它将适用于我上面的示例。以下是我当前的代码。

$query = "SELECT * 
          FROM customer_search_view 
          WHERE COALESCE(customer_search_view.first_name,'') LIKE $firstName AND 
            COALESCE(customer_search_view.last_name,'') LIKE $lastName AND 
            COALESCE(customer_search_view.customer_id,'') LIKE $customerId AND 
            COALESCE(customer_search_view.primary_phone,'') LIKE $primaryPhone AND 
            COALESCE(customer_search_view.email,'') LIKE $email AND 
            COALESCE(customer_search_view.store,'') LIKE $store AND 
            COALESCE(customer_search_view.sales_associate,'') LIKE $salesAssociate AND 
            COALESCE(customer_search_view.bdr_associate,'') LIKE $bdrAssociate AND 
            COALESCE(customer_search_view.status,'') LIKE $status AND 
            COALESCE(customer_search_view.lead_category,'') LIKE $leadCategory 
          ORDER BY created_on DESC LIMIT 0,100";

如果无论如何要搜索 LIKE NULL 的位置,它也将是一个快速修复。

4

1 回答 1

1

找到 NULL 的唯一方法是使用COALESCE(customer_search_view.primary_phone,'') IS NULL,因此您需要将变量扩展为

COALESCE(customer_search_view.primary_phone,'') $primaryPhoneOperator $primaryPhone

如果您无法更改前端,则可以在查询之前遍历值,例如

if(empty($primaryPhone)) { $primaryPhoneOperator = "IS NULL";  } else { $primaryPhoneOperator = "LIKE"; }
于 2012-08-30T15:50:51.810 回答