3

有没有办法嵌套 where 子句?例如:

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'))

谢谢

4

2 回答 2

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 库的项目中,我更喜欢在构建此类查询时使用group_start()and方法,它们有很多不同的风格group_end()

更新

现在有了 Codeigniter 3,它在查询构建器中具有分组方法->group_start(),因此您可以执行s 和->group_end()s。

于 2012-08-13T19:14:55.950 回答
-1

你也可以试试

$this->db->where(condition1);
$this->db->or_where(condition2);
于 2012-08-21T09:40:34.837 回答