我在网上搜索过,找不到能给我展示一个好例子的东西。我的问题基本上是这样的:
我如何转换它:
SELECT * FROM表WHERE((a = 1 AND b = 2)OR(c = 3 OR c = 4))AND d = 5;
To Zend语法类似于:
$这 - > select()的 - >从(; ''。$这 - &GT _schema $这 - > _name) - > where('a =?','1');
那怎么办呢?
提前多多感谢。
答案 0 :(得分:14)
我有类似的问题。请参阅答案中的代码示例:Grouping WHERE clauses with Zend_Db_Table_Abstract
所以你最终会得到类似的东西:
$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 :(得分:2)
1)为所有组建立一个条件Where /或Where:
$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 where条件:
$this->select()
->where('d= ?', 5)
->where(implode(' ', $conditions));
http://framework.zend.com/manual/1.12/ru/zend.db.select.html
答案 2 :(得分:1)
在Zend Framework网站上每message board post,这可能是不可能的。
在我看来,Zend_Db_Select类中的where()和orWhere()不足以能够编写所有查询。它不支持条件的嵌套,这在某些更复杂的情况下不会强制用户进行抽象。使用where()和orWhere()我不能写这个:
答案 3 :(得分:0)
修改强>
Zend_Db_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所说,你无法嵌套orWhere
,但你可以将多个参数传递给where
和orWhere
。
$this->select()
->from($this->_schema.'.'.$this->_name)
->where(' ( a = ? AND b = ? ) OR ( c = ? OR c = ? ) ', array(1,2,3,4))
->where('d = ?',array(5));
击> <击> 撞击>