2011-06-02 44 views
0

我正在尝试为我正在开发的一家小店设置一个过滤系统。基本上,我正在将结果从一系列变量中去除。如果没有querystring,页面,products.php将显示所有产品。但是,如果存在变量,我希望它在必要时更改select语句。php select声明依赖于变量存在

但是,我有问题筛选。如果我对所有变量使用AND语句,它不适当地过滤它们。所以如果我想要黑色尺码5的鞋子,它会显示所有五号尺寸,不管颜色。

有没有更好的方法来采取这与成为一个公平的老头抓手!

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条件进行比较 – 2011-06-02 15:27:32

回答

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_stringmysqliPDO

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;" 

然后你执行你的查询:)