Zend.DB:我如何对";或者Where()";条款


Zend.DB: How do I group "orWhere()" clauses?

我有一个小任务要处理,虽然我可以只使用query()函数手动写出SQL,但我真的有兴趣了解这一点。

注意:我对ZF非常了解(尤其是作为框架(。。我只是将DB用作一个库。

预期结果:
我希望我的sql看起来像这样:

SELECT name, phone, email 
FROM company 
WHERE name = 'Acme Anvil Corp' 
AND ( category1 = 'abc' 
      OR category3 = 'klm'
      OR category8 = 'xyz'
    )


到目前为止我的进展:

$select = $db 
            ->select() 
            ->from('company, array('name', 'phone', 'email'))
            ->where('name = ?', 'Acme Anvil Corp')
            ->limit(1);

在那之后,我被窃听了
添加一大堆orWhere()的突出不会得到想要的结果
如何在一个集体分组()中添加一堆orWhere()


或者,我想尝试将我的SQL看起来更像

SELECT c.name, c.phone, c.email 
FROM  (
        SELECT name, phone, email 
        FROM company
        WHERE category1 = 'abc' 
        OR category3 = 'klm'
        OR category8 = 'xyz'
      ) AS c
WHERE c.name = 'Acme Anvil Corp'

(我不是SQL专家,所以如果这两者之间有显著差异,不要回避反馈:(

再说一遍,只是不确定如何处理。

use Zend'Db'Sql'Predicate;
$select->where(array(
    // ...
    new Predicate'PredicateSet(
        array(
            new Predicate'Like('content', '%'.$searchstring.'%'),
            new Predicate'Like('title', '%'.$searchstring.'%'),
        ),
        Predicate'PredicateSet::COMBINED_BY_OR
    ),
    // ...
));

此外,

$predicate = new  'Zend'Db'Sql'Where();
$sql->where($predicate->greaterThan('filterColumn', '20'));
$sql->where($predicate->greaterThan('filterColumn', '30'), 'OR');