我有一个小任务要处理,虽然我可以只使用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');