有没有办法嵌套where子句? e.g:
SELECT * FROM table WHERE (colA = 'valueA' AND colB = 'valueB') OR (colA = 'valueC' AND colB = 'valueD')
我知道我可以将其写入query
函数调用,例如:
$this->db->query("SELECT ...")
但是我想知道在codeigniter中是否有一种“正确”的方法可以做到这一点,例如:
$this->db->where(array('colA'=>'valueA'), array('colB'=>valueB'))->or_where(array('colA'=>'valueC'), array('colB'=>'valueD'))
感谢
答案 0 :(得分:7)
使用codeigniter 3,现在有,请参阅更新!
没有在这些情况下,我通常只需在一个长字符串中构建该部分,如下所示:where()
方法使用变量,其中包含允许您这样做的数组。
$this->db->where("
(
(colA = '".$this->db->escape($v0)."' and colB = '".$this->db->escape($v1)."')
or
(colA = '".$this->db->escape($v2)."' and colB = '".$this->db->escape($v3)."')
)
");
可以使用escape
(执行一些自动检测)或escape_str
或escape_like_str
手动执行转义,具体取决于参数的预期或使用的谓词。
如果我正在使用Datamapper library的项目,我更喜欢在构建这类查询时使用group_start()
和group_end()
方法,他们有{{3}这些。
现在,Codeigniter 3在查询构建器中lot of different flavor,因此您可以执行->group_start()
和->group_end()
。
答案 1 :(得分:-1)
您也可以尝试
$this->db->where(condition1);
$this->db->or_where(condition2);