可能的重复项:
Zend框架复合体在哪里语句
如何在使用引用的同时将这样的东西添加到Zend_Db_Select?
SELECT x FROM y WHERE (a=1 OR b=2) AND (c=3 OR d=4)
我已经看到了where()和orWhere(),但是我认为没有办法用括号将它们分组。我意识到我可以写这个:
->where('(a=1 OR b=2) AND (c=3 OR d=4)')
但理想情况下,我希望对 where() 进行 4 次单独的调用,以便能够使用第二个参数进行引用(假设值 1、2、3 等是用户生成的输入)。
有没有办法在纯粹流利的风格中做到这一点?
有没有办法在纯粹流利的风格中做到这一点?
简短的回答:不。
如前所述,您可以使用orWhere
来编写条件,例如 (a = ?) OR (b = ?)
.
但是,不可能以Zend_Db_Select 会自动在使用 where() 或 orWhere() 方法指定的每个表达式两边加上括号。这有助于确保布尔运算符优先级不会导致意外结果。
您希望的方式嵌套AND
和OR
条件。
如果你写了这个:
->where('a=?', $a)
->orWhere('b=?', $b)
->where('c=?', $c)
->orWhere('d=?', $d)
这将导致类似于以下内容的 SQL:
(a=1) OR (b=2) AND (c=3) OR (d=4)
这将解释如下(不是您想要的):
(a=1) OR ((b=2) AND (c=3)) OR (d=4)
选择:
- 手动编写 SQL。
- 使用此处所示的
quoteInto
。