嵌套where子句codeigniter mysql查询

时间:2012-08-13 15:52:07

标签: codeigniter

有没有办法嵌套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'))

感谢

2 个答案:

答案 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_strescape_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);