1

我有一个小任务要处理,虽然我可以使用该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()'s 突起不会产生预期的结果。
如何orWhere()在集体分组中添加一堆 's ()


或者,我想过尝试让我的 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 专家,所以如果这两者之间存在显着差异,请不要对反馈感到害羞:)

同样,只是不确定如何解决这个问题。

4

1 回答 1

1
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');
于 2013-03-21T20:47:14.667 回答