Zend DB更新中的OR子句?

时间:2012-06-27 22:53:39

标签: zend-framework zend-db zend-db-table

我想用OR子句进行Zend db更新。什么是等同的陈述:

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

2 个答案:

答案 0 :(得分:8)

调用Zend_Db_Adapter::update()时,将使用WHERE(函数_whereExpr中Zend / Db / Adapter / Abstract.php的第698行)自动合并多个AND条件。

您可以通过创建自己的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') 条件合并。

示例:

{{1}}

答案 1 :(得分:2)

- > where()将在查询中添加where子句,并将放置一个“AND”。有一种orWhere方法可以做到这一点。

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

$this->fetchAll($select);