依赖于现有变量的php select语句
我正试图为我正在开发的一家小店设置一个过滤系统。基本上,我是根据变量列表计算结果的。页面products.php如果没有querystring将显示所有产品。但是,如果存在变量,我希望它在必要时更改select语句 但是,我在过滤方面有问题。如果我对所有变量使用AND语句,则它不会进行适当过滤,OR也不会。所以,如果我想要黑色的5号鞋,无论颜色如何,它都会显示所有的5号鞋 有没有更好的方法来处理这件事,因为它正在成为一个相当老的挠头者依赖于现有变量的php select语句,php,mysql,select,if-statement,query-string,Php,Mysql,Select,If Statement,Query String,我正试图为我正在开发的一家小店设置一个过滤系统。基本上,我是根据变量列表计算结果的。页面products.php如果没有querystring将显示所有产品。但是,如果存在变量,我希望它在必要时更改select语句 但是,我在过滤方面有问题。如果我对所有变量使用AND语句,则它不会进行适当过滤,OR也不会。所以,如果我想要黑色的5号鞋,无论颜色如何,它都会显示所有的5号鞋 有没有更好的方法来处理这件事,因为它正在成为一个相当老的挠头者 if ($queryString == NULL){
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
然后执行查询:在运行查询之前,尝试构建WHERE条件 字符串: products.php?sale=&cat\u 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\u real\u escape\u string、mysqli或PDO查询之前,请记住清除$\u GET变量 您应该注意,如果第一个或条件为真,则不会进一步比较。如果只想返回特定的记录,还必须将颜色和大小与和条件进行比较
$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";