我有一个搜索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,那么它也是一个快速解决方法。
答案 0 :(得分: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"; }