作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个动态的 where 子句。我在 PHP
中得到一些复选框数组,如下代码
$brand = array();
if(isset($_GET['brand']) && !empty($_GET['brand']))
$brand=$_GET['brand'];
$brand_str = implode("' , '",$brand);
}
我的 SQL 查询是
$sql="SELECT DISTINCT * FROM products WHERE brand IN('$brand_str')";
如果未定义品牌,则会出现错误或未获取任何行,但这是一个简单的问题,可以使用以下方法解决。
我的方法:
我在 if 语句中使用了一个像 'flag_for_filter_brand' 这样的变量,如果 flag_for_filter_brand=1 QUERY 是
$brand = array();
$flag_for_filter_brand=false;
if(isset($_GET['brand']) && !empty($_GET['brand']))
$brand=$_GET['brand'];
$brand_str = implode("' , '",$brand);
$flag_for_filter_brand=true;
}
if(flag_for_filter_brand);
$sql="SELECT DISTINCT * FROM products WHERE brand IN('$brand_str')";
else
$sql="SELECT DISTINCT * FROM products;
我的问题:但这也是一个大问题,因为我的代码变得如此之大,因为有如下两个三个 where 子句
$sql="SELECT DISTINCT * FROM products WHERE brand IN('$brand_str') and Quantity IN ($var2) and type IN($var3)";
如何以最佳方式解决这个问题?
感谢任何建议或帮助
最佳答案
将每个 WHERE
条件放在一个数组中。然后测试数组是否包含任何东西。
$wheres = array();
if(isset($_GET['brand']) && !empty($_GET['brand']))
$brand=$_GET['brand'];
$brand_str = implode("' , '",$brand);
$wheres[] = "brand IN ('$brand_str')";
}
if(isset($_GET['quantity']) && !empty($_GET['quantity']))
$quant=$_GET['quantity'];
$quant_str = implode("' , '",$quant);
$wheres[] = "Quantity IN ('$quant_str')";
}
// Repeat this for other conditions
if (!empty($wheres)) {
$where_str = "WHERE " . implode(' AND ', $wheres);
} else {
$where_str = "";
}
$sql = "SELECT DISTINCT * FROM Products $where_str";
如果你有很多条件,你可以把字段名放在一个数组中,然后把这个答案的第一部分做成一个循环:
$fields = array('brand', 'quantity', 'type', ...);
foreach ($fields as $field) {
if (!empty($_GET[$field])) {
$field_str = implode("' , '", $_GET[$field]);
$wheres[] = "$field IN ('$field_str')";
}
}
关于php - MYSQL:其中列 IN(Any_value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938030/
我是一名优秀的程序员,十分优秀!