我有一个小任务我必须处理,虽然我可以只是使用query()
函数手写出SQL,但我 < em>真的 有兴趣了解这一点。
注意:我在ZF上非常环保(尤其是作为框架)..我只是将数据库用作lib。
期望的结果:
我希望我的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()
的jut将无法获得理想的结果
如何在集体分组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大师,所以如果这两者之间存在显着差异,请不要羞于反馈:)
再次,只是不确定如何处理它。
答案 0 :(得分: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');