【问题标题】:mySQL statement in Zend Framework DB_TABLEZend Framework DB_TABLE 中的 mySQL 语句
【发布时间】:2013-01-16 09:54:12
【问题描述】:

我想知道在这种情况下如何使用 ZEND 正确编写 mySQL 语句:

SELECT * FROM `users` WHERE role_id = 2 AND status = 2 AND bddate BETWEEN '1988-05-07' AND '1991-01-01' ORDER BY lastname DESC

我会有 if 语句,例如。如果在过滤器中用户选择了 role_id,我会将其包含在 WHERE 等中,其余部分相同。

到目前为止,我有 1 个 WHERE 条件,我已经这样做了(现在我需要更复杂的条件):

    $select = $this->select()
            ->setIntegrityCheck(false)
            ->from(array('u'=>'users'))
            ->join(array('r'=>'user_roles'), 'u.role_id = r.role_id', array('role'=>'title'));          
    if(count($filters) > 0) {
        foreach($filters as $field => $filter) {
            $select->where($field . ' = ?', $filter);
        }
    }

    if(null != $sortField) {

        $select->order($sortField);

    }

【问题讨论】:

  • 我不太明白你的问题。您似乎已经能够构建查询。那么在您的第一个选择语句中更复杂的是什么/您到底在哪里遇到问题?
  • 我写了查询,但是如何为 ZEND_DB 做呢?在我的代码中,我只有 1 个 WHERE,而在我想要实现的新语句中,我还有几个 BETWEEN

标签: php mysql zend-framework zend-db


【解决方案1】:

好的,所以你遇到了 BETWEEN 的问题。有两种可能的解决方案:

a) 你使用两个 where 子句来分割 BETWEEN,所以你得到

$select = $this->select()
//... other conditions
    ->where('bddate >= ?', '1988-05-07')
    ->where('bddate <= ?', '1991-01-01');

b)

$select = $this->select()
//... other conditions
    ->where ('bddate BETWEEN '1988-05-07' AND '1991-01-01');

我会推荐选项 a),因为它正确地转义了您的值。

【讨论】:

  • 所以,我可以做尽可能多的->我想去哪里? (根据你的例子判断)
  • @Mikey 是的,你可以。他们都得到了AND-ed在一起。您实际上已经在您的代码中执行此操作... "foreach($filters as $field => $filter) { $select->where($field . ' = ?', $filter); }"
猜你喜欢
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多