gpt4 book ai didi

php - MYSQL:其中列 IN(Any_value)

转载 作者:行者123 更新时间:2023-11-29 05:22:37 25 4
gpt4 key购买 nike

我正在尝试创建一个动态的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com