mysql
  • sql
  • select
  • 2013-09-22 24 views 1 likes 
    1

    我有一個SQL查詢,使用一堆OR x = y語句檢查表中是否存在多個給定值之一。然後我會對結果進行一次統計。SQL查詢 - 確定哪個邏輯運算符爲真

    $exists = db_query("SELECT * FROM {leads_client} WHERE (companyName = '".$form_state['values']['company_name']."' 
             OR billingEmail = '".$form_state['values']['billing_email']."' 
             OR leadEmail = '".$form_state['values']['lead_email']."' 
             OR contactEmail = '".$form_state['values']['contact_email']."' 
             OR url = '".$form_state['values']['company_url']."') AND NOT 
             clientId = '".$clientId."'"); 
    
        if($exists->rowCount() > 0){ 
          //Do something 
        } 
    

    什麼是最簡潔的方式來確定哪些OR語句是真的,而不會將其分解爲多個查詢?

    回答

    1

    你可以做原料比較在選擇:

    SELECT *, 
        companyName = '".$form_state['values']['company_name']."' AS companyNameMatch, 
        billingEmail = '".$form_state['values']['billing_email']."' AS billingEmailMatch, 
        ... 
    FROM {leads_client} 
    WHERE (companyName = '".$form_state['values']['company_name']."' 
         OR billingEmail = '".$form_state['values']['billing_email']."' 
         OR leadEmail = '".$form_state['values']['lead_email']."' 
         OR contactEmail = '".$form_state['values']['contact_email']."' 
         OR url = '".$form_state['values']['company_url']."') AND NOT clientId = '".$clientId."'"); 
    

    這將返回一個結果,如:

    |------------------|-------------------| 
    | companyNameMatch | billingEmailMatch | 
    |------------------|-------------------| 
    | 0    | 1     | 
    |------------------|-------------------| 
    

    通過這種方式,您將知道哪些匹配的列與1的匹配。

    0

    你可以添加一個CASE聲明跟蹤哪些條件滿足,是這樣的:

    SELECT * 
         ,CASE WHEN companyName = '".$form_state['values']['company_name']."' THEN 'condition1' 
          WHEN billingEmail = '".$form_state['values']['billing_email']."' THEN 'condition2' 
          ... 
         END 
    FROM {leads_client} 
    WHERE (companyName = '".$form_state['values']['company_name']."' 
         OR billingEmail = '".$form_state['values']['billing_email']."' 
         OR leadEmail = '".$form_state['values']['lead_email']."' 
         OR contactEmail = '".$form_state['values']['contact_email']."' 
         OR url = '".$form_state['values']['company_url']."') AND NOT 
             clientId = '".$clientId."'"); 
    
    1

    你的網站很容易受到SQL注入式攻擊。您需要立即閱讀本文並修復全部您的數據庫查詢以正確使用參數。

    Drupal的編寫安全代碼: https://drupal.org/writing-secure-code

    Drupal的數據庫訪問: https://drupal.org/node/101496

    相關問題