CodeIgniter - SQL 语句 IF 那么 WHERE?

Posted

技术标签:

【中文标题】CodeIgniter - SQL 语句 IF 那么 WHERE?【英文标题】:CodeIgniter - SQL sentence IF then WHERE? 【发布时间】:2021-10-30 14:13:59 【问题描述】:

目前我能够在 CodeIgniter 中执行 WHERE 语句如下:

$builder = $db->table('mytable');
$builder->select(*);
$builder->where('age >='.$params['some-param']);

我需要做的是一个仅在 IF 语句为真时才适用的 WHERE 语句。比如:

(IF gender = 'Male', apply these rows the following where) $builder->where('age >='.$params['some-param']);
(IF gender = 'Female', apply these other rows, this where and not the first one) $builder->where('age >='.$params['some-other-param']);

还要注意 ['some-param'] 和 ['some-other-param'] 不会一直存在。我知道它可以用 OR 语句来实现,但如果 ['some-other-param'] 未设置,那么查询将类似于:

$builder->where("age >=".$params['some-param']." AND gender = 'Male'");

这不会包括任何性别 = 'Female' 的行,我也需要它。

我不知道如何实现这一点。任何方向都将不胜感激。

【问题讨论】:

【参考方案1】:

这样的东西不可行吗?

-- Both age filters are set
select *
from my_table
where (
    (gender = 'Male' and age >= 20)
    or 
    (gender = 'Female' and age >= 30)
)

-- Only Male filter is set
select *
from my_table
where (
    (gender = 'Male' and age >= 20)
    or 
    gender = 'Female'
)

-- Only Female filter is set
select *
from my_table
where (
    (gender = 'Female' and age >= 20)
    or 
    gender = 'Male'
)

【讨论】:

它可以工作,但这些过滤器并不总是存在。因此,如果没有“女性”年龄过滤器,那么它将类似于 $builder->where(gender = 'Male' and age >= 20 )。这不包括任何女性。我需要的是同时获得男性和女性,但只有在用户设置它们时才包含这些过滤器。 那您不能只使用if .. then .. else .. 语句来检查是否设置了参数并在此基础上创建查询吗?这应该是可能的,不是吗?我认为这里有类似的东西:***.com/questions/25462064/… 这就是我目前正在做的事情。我的意思是,我需要过滤所有数据。但是,如果您设置了女性年龄或男性年龄的可选参数,则查询应仅按输入年龄或年龄过滤女性、男性或两者(视情况而定)。但是,例如,如果用户仅输入男性年龄,那么正常的 where 查询将是 where(" gender = 'Male' AND age >= ."$param['male-age-filter']),这不只是选择男性行?在这种情况下,我只需要过滤男性,但也包括女性。 因此,如果两者都设置了参数,那么WHERE 子句将类似于我上面的示例。如果只设置了男性年龄过滤器,那么它将是WHERE (gender = 'Male' and age >= 20) OR gender = 'Female'。如果只设置了女性过滤器,那么它将是WHERE (gender = 'Female' and age >= 20) OR gender = 'Male' 听起来像。我会试试的。

以上是关于CodeIgniter - SQL 语句 IF 那么 WHERE?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 语句/Codeigniter 预约

使用Codeigniter的多个IF,ELSEIF语句和&&运算符

mysql 和 codeigniter 的奇怪插入行为

带嵌套的Sql语句执行顺序问题

如何在 CodeIgniter 中使用准备好的语句

如何用sql语句把查询后的结果那一列数据全部替换。