Zend framework 如何将复杂where子句添加到Zend表Select?

Zend framework 如何将复杂where子句添加到Zend表Select?,zend-framework,zend-db,zend-db-table,Zend Framework,Zend Db,Zend Db Table,我在网上搜索,找不到任何能给我一个好的可靠例子的东西。我的问题基本上是: 如何将其转换为: 从表中选择*,其中((a=1和b=2)或(c=3或c=4))和d=5 要使用与此类似的Zend语法: 美元这个 ->选择() ->from($this->\u schema...$this->\u name) ->式中('a=?','1') 那么,如何做到这一点呢 事先非常感谢。根据Zend Framework网站上的a,这可能是不可能的 在我看来,Zend_Db_Select类中的where()和orW

我在网上搜索,找不到任何能给我一个好的可靠例子的东西。我的问题基本上是:

如何将其转换为:

从表中选择*,其中((a=1和b=2)或(c=3或c=4))和d=5

要使用与此类似的Zend语法:

美元这个 ->选择() ->from($this->\u schema...$this->\u name) ->式中('a=?','1')

那么,如何做到这一点呢

事先非常感谢。

根据Zend Framework网站上的a,这可能是不可能的

在我看来,Zend_Db_Select类中的where()和orWhere()不足以编写所有查询。它不支持条件嵌套,这在更复杂的情况下不会强制用户进行抽象。使用where()和orWhere()我无法编写以下内容:

编辑

Zend\u Db\u Select->where
的数组功能仅设计用于与
IN
子句中的
一起使用

Example #17 Example of an array parameter in the where() method
// Build this query:
//   SELECT product_id, product_name, price
//   FROM "products"
//   WHERE (product_id IN (1, 2, 3))

$productIds = array(1, 2, 3);

$select = $db->select()
             ->from('products',
                    array('product_id', 'product_name', 'price'))
             ->where('product_id IN (?)', $productIds);
原创

正如Peder所说,不能嵌套
或where
,但可以将多个参数传递到
where
或where

$this->select()
  ->from($this->_schema.'.'.$this->_name)
  ->where(' ( a = ? AND b = ? ) OR ( c = ? OR c = ? ) ', array(1,2,3,4))
  ->where('d = ?',array(5));

我也有类似的问题。请参见此处答案中的代码示例:

所以你会得到这样的结果:

$db = $this->getAdapter();
$this->select()
     ->where('(' . $db->quoteInto('a = ?', 1) . ' AND ' . $db->quoteInto('b = ?', 2) . ') OR (' . $db->quoteInto('c = ?', 3) . ' OR ' . $db->quoteInto('c = ?', 4) . ')')
     ->where('d = ?', 5);
这将给你:

SELECT `table_name`.* FROM `table_name` WHERE ((a = 1 AND b = 2) OR (c = 3 OR c = 4)) AND (d = 5)
1) 为所有组建立条件,其中/或其中:

$conditions = $this->select()
        ->where('a= ?', 5)
        ->orWhere('b= ?', 6)
        ->getPart(Zend_Db_Select::WHERE);
// result: $conditions = "(a= 5) OR (b= 6)";
使用getPart()方法获取where条件

2) 接下来,重置当前选择对象的where部分:

$this->select()->reset(Zend_Db_Select::WHERE);
3) 最后,根据需要使用where条件:

$this->select()
    ->where('d= ?', 5)
    ->where(implode(' ', $conditions));

-1。这将用内容
数组(1,2,3,4)
替换每个
,生成一个查询
选择“表”。“表”中的“列”,其中((a=1,2,3,4和b=1,2,3,4)或(c=1,2,3,4或c=1,2,3,4)和(d=5)
您是正确的。我记得不久前有人在堆栈溢出上显示了这个“特性”,所以,没有办法用where或where函数来实现这一点?