首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend Framework Complex Where语句

Zend Framework Complex Where语句
EN

Stack Overflow用户
提问于 2010-10-10 17:42:44
回答 4查看 1.8K关注 0票数 2

此方法作为官方示例发布。

->where("price < $minimumPrice OR price > $maximumPrice")这样的方法安全吗?

想把它写成价格(“->where<?或价格> ?",$minimumPrice,$maximumPrice)有什么毒性吗?

并且我不能将它拆分为2个where语句,因为计划编写查询->where("1 OR 2") ->where("3 OR 4")

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-14 05:54:26

如果我有复杂的WHERE子句,我会使用数据库适配器的->quoteInto()方法,如下所示:

代码语言:javascript
复制
$where = '('
           . $dbAdapter->quoteInto('price1 < ?', $price1)
           . ' OR '
           . $dbAdapter->quoteInto('price1 > ?', $price1)
       . ')'
       . ' AND '
       . '('
           . $dbAdapter->quoteInto('price2 < ?', $price2)
           . ' OR '
           . $dbAdapter->quoteInto('price2 > ?', $price2)
       . ')'
       ;

$select->where($where);
票数 1
EN

Stack Overflow用户

发布于 2010-10-10 17:54:20

试试这个:

代码语言:javascript
复制
$query->where('(price < ?', $minPrice)
->orWhere('price > ?)', $maxPrice)
->where('some = ?', $some_other_variable);

结果:where ((price < $minPrice) OR (price > $maxPrice)) AND (some = $some_other_variable)

请注意OR部分中的双(( ))

票数 3
EN

Stack Overflow用户

发布于 2011-08-10 22:20:11

有时,您可能希望进行SQL查询,其中多个where条件周围有括号,这些条件可以很容易地使用foreach进行解析,但是您不希望为字符串操作而烦恼。例如,您有一个id为的用户列表,这些用户必须是特定类型的,您可以尝试这样做:

代码语言:javascript
复制
$select = $this->select();
$subWhere = $this->select();
foreach(array_keys($idArr) as $key => $value) {
  $subWhere->orWhere('id=?', $value);
}
$select->where(implode(' ', $subWhere->getPart('WHERE')))->where('type=?', 'customer');

这将导致"SELECT * FROM table WHERE ((id=X) OR (id=Y) OR (id=Z)...) AND (type='customer');“

这个想法进一步发展,你可以扩展Zend_Db_Table_Abstract:

代码语言:javascript
复制
public function subWhere($col, $binds, $operands, $andOr = 'OR' )
{
    $subWhere = $this->select();
    if(strtolower($andOr) == 'or') {
        foreach($binds as $key => $value) {
            $subWhere->orWhere($col.$operands[$key].'?', $value);
        }
        return implode(' ', $subWhere->getPart('WHERE'));
    }
    elseif (strtolower($andOr) == 'and') {
        foreach ($binds as $key => $value) {
            $subWhere->where($col.$operands[$key].'?', $value);
        }
        return implode(' ', $subWhere->getPart('WHERE'));
    }
    else {
        return false;
    }
}

并将其用作:

代码语言:javascript
复制
$this->select()->where($this->subWhere($col, $binds, $operands));

当然,您应该允许混合数组,$operands = $cols ()缺省为'=?‘等等,但为了简单起见,我省略了这一点。但我认为我们应该使用本机SQL函数,如IN(),在...还有...不是在..。然后呢?不过,Zend Framework并不能让你的生活变得非常轻松。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3899795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档