5

我想使用 OR 子句进行 Zend db 更新。什么是等效的声明:

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

2 回答 2

8

调用时Zend_Db_Adapter::update(),多个WHERE条件会自动组合使用AND(函数_whereExpr中Zend/Db/Adapter/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')
于 2012-06-27T23:30:37.073 回答
2

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

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

$this->fetchAll($select);
于 2012-06-28T12:40:47.147 回答