2012-08-30 40 views
0

我有一個搜索SQL數據庫的PHP表單。有8個表單字段,每個字段都是可選的。如果一切都保留爲空,則查詢將返回整個數據庫。如果填寫了一個字段,它將過濾一個字段,兩個過濾兩個字段等。我沒有任何問題,直到我想要搜索空條目的能力。因此,例如,我想搜索客戶的姓氏,但沒有主要電話號碼。我已經工作了幾個小時,想不到一個簡單的方法來實現這樣的事情。當你在搜索字段中輸入一個關鍵字來搜索項目在其他項目之上爲空的位置時,我會設想它。因此,如果我將「Smith」放入姓氏並將「NULL」放入電話號碼中,則可以與我的上述示例一起使用。以下是我目前的代碼。PHP SQL搜索表單語法

$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,它也是一個快速修復。

回答

1

找到NULL的唯一方法是使用COALESCE(customer_search_view.primary_phone,'') IS NULL所以你需要擴展你的變量要像

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

如果之前您的查詢,例如,你不能改變你的前端您可以通過值環as

if(empty($primaryPhone)) { $primaryPhoneOperator = "IS NULL"; } else { $primaryPhoneOperator = "LIKE"; }