2011-06-02 4 views
0

私は開発中の小さな店のためのフィルタシステムをセットアップしようとしています。基本的には、結果を変数リストから取り除いています。ページ、products.phpにクエリーストリングがない場合、すべての製品が表示されます。しかし、変数が存在する場合は、必要に応じてselect文を変更したい。php select文は変数に依存しています

ただし、フィルタリングに問題があります。すべての変数にANDステートメントを使用すると、適切にフィルター処理されず、ORも正しく処理されません。だから、私は黒のサイズ5の靴をしたい場合は、色に関係なくすべてのサイズのfivesを表示するだろう。

これと一緒に取るより良いアプローチは、かなり古い頭の傷者になっていますか?

if ($queryString == NULL){ 
    $query = "SELECT * FROM store_products 
JOIN store_cat on store_products.cat=store_cat.cat_id 
JOIN prod_sizes on store_products.prod_id=prod_sizes.product_id 
JOIN prod_color on store_products.prod_id=prod_color.product_id 
GROUP BY store_products.prod_id"; 
}else{ 
     $query = "SELECT * FROM store_products 
JOIN store_cat on store_products.cat=store_cat.cat_id 
JOIN prod_sizes on store_products.prod_id=prod_sizes.product_id 
JOIN prod_color on store_products.prod_id=prod_color.product_id 
where store_products.sale='$sale' OR prod_color.color='$color' OR prod_sizes.size='$size' OR store_products.cat='$cat' GROUP BY store_products.prod_id"; 
} 

例文字列変数

products.php?sale=&cat_id=1&size=&color=Yellow 
+0

最初のOR条件が真であれば、それ以上は比較されません。また、特定のレコードのみを返す場合は、色とサイズをAND条件と比較する必要があります –

答えて

0

をクエリを実行する前に、あなたのWHERE基準を構築してみます。

文字列:
products.php?sale=&cat_id=1&size=&color=Yellow

myfile.php

$criteria = "WHERE 1 "; 

if (isset($_GET['sale']) { 
    $criteria .= "AND tore_products.sale=$_GET['sale'] "; 
} 
if (isset($_GET['cat_id']) { 
    $criteria .= "AND store_products.cat=$_GET['cat_id'] "; 
} 
if (isset($_GET['color']) { 
    $criteria .= "AND tore_products.color=$_GET['color'] "; 
} 

などなど、あなたのクエリを実行します。

$query = "SELECT * FROM store_products 
JOIN store_cat on store_products.cat=store_cat.cat_id 
JOIN prod_sizes on store_products.prod_id=prod_sizes.product_id 
JOIN prod_color on store_products.prod_id=prod_color.product_id 
$criteria 
GROUP BY store_products.prod_id"; 

そして下さいは前にあなたの$ _GET変数をきれいにすることを忘れないでくださいそれらを使用してを照会すると、mysql_real_escape_string,mysqliまたはPDO

0
$query = "SELECT * FROM store_products 
    JOIN store_cat on store_products.cat=store_cat.cat_id 
    JOIN prod_sizes on store_products.prod_id=prod_sizes.product_id 
    JOIN prod_color on store_products.prod_id=prod_color.product_id "; 

if {$queryString != NULL){ 
$query .= " WHERE tore_products.sale='$sale' OR prod_color.color='$color' OR prod_sizes.size='$size' OR store_products.cat='$cat'" 
} 
$query .=" GROUP BY store_products.prod_id;" 

は、次に、あなたのクエリが実行:)

関連する問題