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
を呼び出すと、 (関数 _whereExpr の Zend/Db/Adapter/Abstract.php の 698 行目)を使用してZend_Db_Adapter::update()
、複数のWHERE
条件が自動的に結合されます。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')
->where() はクエリに where 句を追加し、'AND' を配置します。そのために存在する orWhere メソッドがあります。
$select = $this->select();
$select->where('id = 5');
$select->orWhere('id = 10');
$this->fetchAll($select);