是否可以使用Zend_Db_Table更新多行?

Ale*_*tau 1 php mysql zend-framework

我有一个简单的数组.

$a = array(
   array('id' => 2, 'year' => 2010),
   array('id' => 3, 'year' => 2011)
);
Run Code Online (Sandbox Code Playgroud)

我有一个带id主键的MySQL表.现在我像这样更新我的表:

foreach ($a as $v) {
  $db->update($v, array('id = ?' => $v['id']));
}
Run Code Online (Sandbox Code Playgroud)

我的$a行包含3700行.我需要创建一个大查询而不是循环.怎么办?先感谢您.对不起我的英语不好.

Jak*_*e N 7

您经常不会这样做,因为您通常会将update()大量记录设置为具有相同的值,或者将一条记录设置为具有许多不同的值.

解决这个问题的一种方法是聚合更新,因此使用您的数组获取2011年的所有ID,然后运行:

 $where = array();

 // This where should contain all the ids that need the year set to 2011
 // E.g.
 $where[] = array("id" => 3);

 $db->update("table_name", array("year" => 2011), $where);
Run Code Online (Sandbox Code Playgroud)

这样做会减少查询次数,假设您有多年同一行.这方面的文档就在这里.

或者你可以使用的方法是这样

OP响应后编辑

问题的本质意味着它无法有效地解决.

您要求使用非常不同的数据集更新3,700行数据.如果数据集不同,那么就没有可以利用的模式来实现这种效果.查找模式,例如同年的行,并将它们用于您的优势将提高查询的速度,但需要像regilero所指出的那样以阵列混搭的形式进行大脑管理.