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

    私は価格とcategory_idをフォームに提出し、その結果、私に結果が表示されます。私が持っているものは以下の通りです。SQLクエリで値が空白の場合、ANDフィールド=値を無視する方法はありますか?

    $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'を無視するクエリを修正するにはどうすればよいですか?

    私はこの目的のために2番目のクエリを作成すると考えましたが、他の方法がありますか?このよう

    答えて

    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が常に整数になる場合、mysql_real_escapeよりも(int)を使用する方が良いですか? – EnexoOnoma

    +1

    @Nikolaiはい期待される値が常に整数なら、エスケープすると文字列などを送ることができますが、(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') 
    
    関連する問題