我搜索了網頁,找不到任何能夠給我看一個很好的實例的東西。我的問題基本上是這樣的:如何將複雜的where子句添加到Zend Table Select?
如何轉換這樣的:
SELECT * FROM表WHERE((A = 1和B = 2)或(C = 3或C = 4))和d = 5 ;
要Zend的語法與此類似:
$此 - >選擇() - >從( - ''。$本> _模式$此 - > _名) - >在哪裏(」 a =?','1');
那麼該怎麼辦?
預先感謝了很多。
我搜索了網頁,找不到任何能夠給我看一個很好的實例的東西。我的問題基本上是這樣的:如何將複雜的where子句添加到Zend Table Select?
如何轉換這樣的:
SELECT * FROM表WHERE((A = 1和B = 2)或(C = 3或C = 4))和d = 5 ;
要Zend的語法與此類似:
$此 - >選擇() - >從( - ''。$本> _模式$此 - > _名) - >在哪裏(」 a =?','1');
那麼該怎麼辦?
預先感謝了很多。
我也有類似的問題。看到答案這裏的代碼示例: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)
根據Zend Framework網站上的message board post,這可能是不可能的。
在我看來,Zend_Db_Select類中的where()和orWhere()不足以寫入所有查詢。它不支持嵌套條件,在較複雜的情況下不會強制用戶進行抽象。與在()和orWhere()我不能寫:
編輯
的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));
-1。這會將每個'?'替換爲內容'array(1,2,3,4)'產生一個查詢'SELECT'table「。」col「FROM」table「WHERE((a = 1,2,3, 4 AND b = 1,2,3,4)OR(c = 1,2,3,4或者c = 1,2,3,4))AND(d = 5)' – 2010-04-14 19:14:23
你是對的。我似乎記得有人在Stack Overflow上顯示了這個「功能」。 – Ballsacian1 2010-04-14 20:11:44
那麼,有沒有辦法做到這一點與哪裏或什麼地方功能? – 2010-04-14 20:33:29
1)建立所有羣體的條件Where/orWhere:
$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 CURRENT選擇對象的一部分:
$this->select()->reset(Zend_Db_Select::WHERE);
3)最後,使用在那裏,只要你想的條件:
$this->select()
->where('d= ?', 5)
->where(implode(' ', $conditions));
http://framework.zend.com/manual/1.12/ru/zend.db.select.html
這可能會起作用。我需要嘗試一下。 – 2010-04-15 14:33:20