多个产品使用php从mysql数据中过滤


Multiple products filter from mysql data using php

我正在尝试使用PHP过滤和显示mysql中的数据。下面是我的输入过滤器。

<form id="search_form">
            <div class="well">
                <h4 class="text-info">Search by Size</h4>
                <input value="32" class="sort_rang" name="size[]" value="New" type="checkbox"> 32
                <input value="36" class="sort_rang" name="size[]" value="fashion" type="checkbox"> 36
                <input value="38" class="sort_rang" name="size[]" value="New" type="checkbox"> 38
            </div>
            
            <div class="well">
                <h4 class="text-info">Search by price</h4>
                <input value="950" class="sort_rangn" name="price[]" value="New" type="checkbox"> 950
                <input value="1024" class="sort_rangn" name="price[]" value="fashion" type="checkbox"> 1024
                <input value="500" class="sort_rangn" name="price[]" value="New" type="checkbox"> 500
            </div>
          </form>

现在我们有两个过滤器,大小和价格都取在数组中,并在mysql中搜索。

$sql="SELECT * FROM products";
    extract($_POST);
            
    if(isset($size)) 
        $sql.=" WHERE size IN (".implode(',', $size).")";
    if(isset($price))
        
        $sql.=" WHERE (price IN (".implode(',', $price)."))";
        
    $all_row=$db->query($sql);

它运行良好,但只有一个条件有效——尺寸或价格,我使用的是一个表名——产品。

您可以尝试以下代码片段:

    $sql="SELECT * FROM products";
    extract($_POST);
    if(isset($size) && isset($price))
        $sql.=" WHERE size IN (".implode(',', $size).") OR price IN (".implode(',', $price).")"; 
    else if(isset($size)) 
        $sql.=" WHERE size IN (".implode(',', $size).")";
    else if(isset($price))
        $sql.=" WHERE (price IN (".implode(',', $price)."))";
    $all_row=$db->query($sql);

无论是大小还是价格,过滤都会成功。如果要同时匹配它们,请在第一个if语句中使用AND而不是OR

注意:在代码中,如果两个变量都设置在一个案例中,则会出现语法错误。这里介绍了IF ELSEIF链的使用。

假设同时设置了$price$size变量。然后,您的$sql变量将受到这两个IF语句的影响。然后,您最终生成的query将有两个where子句,这将为错误语法生成错误。您生成的查询大致如下所示:

SELECT .... WHERE size IN (....) WHERE price IN (...) ...坏语法

$sql="SELECT * FROM products";
extract($_POST);
if(isset($size) && isset($price))
    $sql.=" WHERE size IN (".implode(',', $size).") AND price IN (".implode(',', $price).")"; 
else if(isset($size)) 
    $sql.=" WHERE size IN (".implode(',', $size).")";
else if(isset($price))
    $sql.=" WHERE (price IN (".implode(',', $price)."))";
$all_row=$db->query($sql);

使用这个代码这对我有效。