2017-12-07 24 views
0

私はデータベースを訪問者が行ったフィルタに従ってフィルタリングしようとしています。PHPフィルタを1つのSQLクエリに結合する

$query = "select * from Sheet1 where"; 

//filter query start 
if (!empty($brand)) { 
    $branddata = implode("','", $brand); 
    //testing removing query 
    $query .= " Brand in('$branddata') and"; 
} 

if (!empty($model)) { 
    $modeldata = implode("','", $model); 
    //testing removing query 
    $query .= " Model in('$modeldata') and"; 
} 

/* if(!empty($model) && empty($brand)){ 

} */ 

if (!empty($spower) && !empty($epower)) { 
    $query .= " Power>='$spower' and Power<='$epower' and"; 
} 

if (!empty($sprice) && !empty($eprice)) { 
    $query .= " Doors>='$sprice' and Doors<='$eprice'"; 
} 

$rs = mysqli_query($conn, $query) or die("Error : " . mysqli_error($conn)); 

私が得たい結果は、動作し、正しい構文を持つSQLクエリです。訪問者が価格でフィルタリングしている場合、select * from Sheet1 where Doors>='$sprice' and Doors<='$eprice'など。

現在のところ、私のコードは変数に特定の文字列を単に追加するように作られています。つまり、モデルでフィルタリングしないと、モデル変数が空であるためモデルをスキップします。問題は、電源でフィルタすると、SQLはselect * from Sheet1 where Power>='$spower' and Power<='$epower' andになります。明らかにこれはうまくいきませんので、コードを作成する際に助けが必要なので、すべてのフィルタの組み合わせで動作するようにしてください。

答えて

0

追加$query .= " 1 = 1";それを行うだろう。私はあなたの与えられたコードでいくつかの修正を行いました。見てみましょう。

<?php 
$query = "SELECT * FROM `Sheet1` WHERE"; 

//filter query start 
if(!empty($brand)){ 
    $branddata = implode("','",$brand); 
    $query .= " (Brand in('$branddata')) AND"; 
} 

if(!empty($model)){ 
    $modeldata = implode("','",$model); 
    $query .= " (Model in('$modeldata')) AND"; 
} 

if(!empty($spower) && !empty($epower)){ 
    $query .= " (Power>='$spower' AND Power<='$epower') AND"; 
} 

if(!empty($sprice) && !empty($eprice)){ 
    $query .= " (Doors>='$sprice' AND Doors<='$eprice') AND"; //Added 'AND' 
} 

$query .= " 1 = 1"; //Added new line 

$rs = mysqli_query($conn,$query) or die("Error : ".mysqli_error($conn)); 
?> 

if条件に追加された各クエリに対して、ANDを追加します。その後、最後に$query .= " 1 = 1";を追加します。最後にANDからあなたを救うでしょう。条件のいずれも満たさない場合、クエリはSELECT * FROM Sheet1 WHERE 1 = 1になります。シンプル。そして、クエリの条件を区別することを忘れないでください。あなたが括弧を開いたり閉じたりしているように、あなたの条件を区別してください。

0

私は最後に、このよう

$filters=array(); 

if(!empty($brand)){ 
      $branddata =implode("','",$brand); 
      //testing removing query 
      $filters[]= " Brand in('$branddata')"; 
     } 

if(!empty($model)){ 
      $modeldata =implode("','",$model); 
      //testing removing query 
      $filters[]= " Model in('$modeldata') and"; 
     } 


    if(!empty($spower) && !empty($epower)){ 
      $filters[]= " Power>='$spower' and Power<='$epower' and"; 
     } 

    if(!empty($sprice) && !empty($eprice)){ 
      $filters[]= " Doors>='$sprice' and Doors<='$eprice'"; 
     } 

$query = "select * from Sheet1 where"; 

foreach ($filters as $filter) { 
$query.=' AND '.$filter; 

} 

$rs = mysqli_query($conn,$query) or die("Error : ".mysqli_error($conn)); 
関連する問題