php - mysql 选择变量设置位置

标签 php mysql sql

我有两个表:

  • 销售
  • sales_size

我想查询受变量 $gender、$category 和 $brand 约束的 sales_sizes。

如果设置了各个变量,如何执行 where 语句,如果未设置,则如何不将它们包含在查询中?

[括号内为伪代码]

SELECT size, country
FROM `sales_sizes` WHERE sale_id IN (
    SELECT sale_id
    FROM `sales`
    WHERE [gender = $gender if $gender isset]
    AND [category = $category if $category isset]
    AND [brand = $brand if $brand isset]

) 

最佳答案

您可以将变量收集到数组中,然后像这样处理它:

$gender   = 'f';
$category = null;
$brand    = 'foo';

$rgCondition = ['gender'=>$gender, 'category'=>$category, 'brand'=>$brand];
$rgCondition = array_filter($rgCondition, function($x)
{
   //strip null-ed values:
   return isset($x);
});
$rgWhere     = [];

foreach($rgCondition as $sField=>$mValue)
{
   $rgWhere[] = '`'.$sField.'` = "'.$mValue.'"';   
}
$sWhere = count($rgWhere)?' WHERE '.join(' && ', $rgWhere):'';
//var_dump($sWhere);

-我已经跳过了字符串转义,但不要忘记它。

关于php - mysql 选择变量设置位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19153794/

相关文章:

mysql - 为什么 phpmyadmin 和 mysql docker 容器之间的连接不起作用

mysql - 通过 Doctrine 选择查询后,错误 : Invalid PathExpression. 必须是 StateFieldPathExpression

mysql - (Ecto.Query.CompileError) 元组只能用于与相同大小的文字元组进行比较。 - 灵药

mysql - 当 -SQL 时切换大小写

javascript - JS/PHP ajax 发布 Blob

c# - ASP.NET 相当于此 PHP 代码(数组)?

sql - VS Code 无法识别 SQL 代码中带括号的字符串

sql - 如何在 NHibernate 中编写以下 SQL 查询

php - 选择数据库的最高ID并在PHP中使用结果

javascript - 如何在javascript中获取foreach输入值并将其传递给ajax数据?