php
  • mysql
  • sql
  • 2011-07-31 42 views 0 likes 
    0

    我通過表單提交價格和category_id,然後查詢顯示結果。我有下面這個。如何在SQL查詢中的值爲空時忽略AND field =值?

    $s = mysql_real_escape_string($_GET["s"]); 
    $c = mysql_real_escape_string($_GET["c"]); 
    
    SELECT COUNT(id) FROM products WHERE price <= '$s' AND category_id = '$c' 
    

    當用戶沒有選擇任何類別,並且它的值是空白時,什麼也沒有顯示。我如何解決這個查詢,如果$c沒有任何值,忽略AND category_id = '$c'

    我想爲此創建第二個查詢,但是有沒有其他方法?

    回答

    4

    像這樣的東西應該工作:

    $s = mysql_real_escape_string($_GET["s"]); 
    $c = (int) $_GET["c"]; 
    
    $qpart = ($c > 0 ? " AND category_id = $c " : ''); 
    $qry = "SELECT COUNT(id) FROM products WHERE price <= '$s' ". $qpart; 
    
    +0

    感謝您的支持。但我有個問題。當c總是一個整數時,(int)比mysql_real_escape更好用嗎? – EnexoOnoma

    +1

    @Nikolai是的我相信如果期望的值總是整數,那麼最好使用'(int)',因爲轉義會允許發送字符串等,但(int)強制轉換爲整數,如果它是一個整數,完美如果不是,你會得到一個零。 –

    2

    像這樣:

    if(isset($c)){ 
    
    $cat = " AND category_id = '$c'" 
    
    } 
    
    $sql = "SELECT COUNT(id) FROM products WHERE price <= '$s'" . $cat; 
    
    1
    $addition = ''; 
    if(isset($c) && !empty($c) { 
        $addition = ' AND category_id = ' . $c; 
    } 
    
    $qry = "SELECT COUNT(id) FROM products WHERE price <= '$s'" . $addition; 
    
    +0

    這是正確的,因爲它檢查變量是否存在,它不是空的,這樣可以避免任何通知。 –

    0

    怎麼樣用簡單的邏輯是什麼? 如果參數尚未提供,應短路列檢查並選擇所有行。

    SELECT COUNT(id) 
    FROM products 
    WHERE ($s = 0 OR price <= $s) AND 
         ('$c' = '' OR category_id = '$c') 
    
    相關問題