2012-06-27 66 views
4

我想用OR子句做一個Zend數據庫更新。什麼是等效的聲明:Zend DB更新中的OR子句?

UPDATE mail 
SET message_read = 1 
WHERE id = 5 
OR id = 10 
+0

的可能重複[如何使用多個條件在UPDATE語句Zend_Db的和QuoteInto(http://stackoverflow.com/questions/6321504/how-to-use-multiple-conditions-in-an -update-statement-with-zend-db-and-quoteinto) – cmbuckley

+1

@cbuckley這將結合WHERE使用'AND'這不是OP想要的。 – drew010

回答

6

當調用Zend_Db_Adapter::update(),多WHERE條件將自動使用AND(在功能_whereExpr線的Zend/DB /適配器/ Abstract.php的698)相結合。

你可以通過創建自己的Zend_Db_Expr來解決這個問題,你將使用它作爲WHERE條件,它將保持不變。

例如:

$where[] = new Zend_Db_Expr(
     $table->getAdapter()->quoteInto('id = ?', 5) . ' OR ' . 
     $table->getAdapter()->quoteInto('id = ?', 10) 
); 

// resulting expression: 
// WHERE (id = 5 OR id = 10) 

$table->update($data, $where); 

如果你有額外的WHERE條件,他們將與OR條件由AND結合。

實施例:

$where[] = new Zend_Db_Expr(
     $table->getAdapter()->quoteInto('id = ?', 5) . ' OR ' . 
     $table->getAdapter()->quoteInto('id = ?', 10) 
); 
$where[] = $table->getAdapter()->quoteInto('type = ?', 'sometype'); 

// resulting expression: 
// WHERE (id = 5 OR id = 10) AND (type = 'sometype') 
+0

太好了,謝謝! – joeschmidt45

2

- >其中()將添加一個where子句到查詢和將投入的 'AND'。有一個orWhere方法可以做到這一點。

$select = $this->select(); 
$select->where('id = 5'); 
$select->orWhere('id = 10'); 

$this->fetchAll($select);