php
  • mysql
  • sql
  • 2011-07-31 40 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') 
    
    相关问题