我正在尝试为我正在开发的小商店设置过滤系统。基本上,我正在从变量列表中处理结果。页面,products.php如果没有查询字符串将显示所有产品。但是,如果存在变量,我希望它在必要时更改select语句。
然而,我遇到过滤问题。如果我对所有变量使用AND语句,它不会适当地过滤OR。因此,如果我想要黑色尺码5的鞋子,无论颜色如何,它都会显示所有尺寸为五的鞋子。
有没有更好的方法来接受这一点,因为它正在成为一个公平的老头!#/ p>
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 :(得分: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;"
然后执行查询:)
答案 1 :(得分: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";
请记得在使用mysql_real_escape_string
,mysqli
或PDO
查询之前清理$ _GET变量!