我想使用 OR 子句进行 Zend db 更新。什么是等效的声明:
UPDATE mail
SET message_read = 1
WHERE id = 5
OR id = 10
我想使用 OR 子句进行 Zend db 更新。什么是等效的声明:
UPDATE mail
SET message_read = 1
WHERE id = 5
OR id = 10
调用时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')
->where() 将在查询中添加一个 where 子句并放置一个“AND”。有一个 orWhere 方法可以做到这一点。
$select = $this->select();
$select->where('id = 5');
$select->orWhere('id = 10');
$this->fetchAll($select);