0

SQLデータベースを検索するphpフォームがあります。たとえば、8つのフォームフィールドがあり、それぞれがオプションです。すべてを空白のままにすると、クエリはデータベース全体を返します。1つのフィールドに入力すると、1つのフィールドでフィルタリングされ、2つのフィールドでフィルタリングされます。nullエントリを検索する機能が必要になるまで、問題は発生していません。たとえば、顧客の名前はあるが、主要な電話番号がない場所を検索したいとします。私は数時間働いていますが、このようなものを実装する簡単な方法を考えることはできません。検索フィールドにキーワードを入力して、他のすべての上にアイテムがnullである場所を検索するときに想像します。したがって、「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";

とにかく何かがLIKENULLである場所を検索することがあれば、それも簡単な修正になります。

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 に答える