CodeIgniter - SQL 句 IF then WHERE?
CodeIgniter - SQL sentence IF then WHERE?
目前我可以在 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' 的行,我也需要它。
我不知道如何做到这一点。任何方向将不胜感激。
这样的东西行不通吗?
-- 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'
)
目前我可以在 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' 的行,我也需要它。
我不知道如何做到这一点。任何方向将不胜感激。
这样的东西行不通吗?
-- 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'
)