[英]Is it possible to update multiple rows at the time using Zend_Db_Table?
我有一個簡單的數組。
$a = array(
array('id' => 2, 'year' => 2010),
array('id' => 3, 'year' => 2011)
);
而且我有一個具有id
主鍵的MySQL表。 現在,我像這樣更新表:
foreach ($a as $v) {
$db->update($v, array('id = ?' => $v['id']));
}
我的$a
包含3700行。 我需要創建一個大查詢而不是循環。 怎么辦 先感謝您。 對不起我的英語不好。
您的詢問通常不會完成,因為您通常會使用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);
假設您在同一年中有很多行,這樣做會減少查詢的數量。 有關此文檔,請參見此處 。
或者你可以使用的方法是這樣
OP響應后編輯
問題的本質意味着無法有效解決。
您要求一種使用非常不同的數據集更新3700行數據的方法。 如果數據集不同,那么您就無法利用任何模式來提高效率。 查找模式(如同一年的行)並將其用於您的優勢將提高查詢速度,但將需要一些人的大腦迷惑,如regilero指出的那樣,采用陣列混搭的形式。
這是一篇有關如何快速輕松地更新多行的出色文章。 它討論了通過匯總要在單獨數組中設置的公共值,然后更新每個值來將多個update語句折疊為幾個語句的方法:
$allIds = array();
foreach ($a as $item) {
$allIds[$item['year']][] = $item['id'];
}
foreach ($allIds as $year => $ids) {
$bind = array('year' => $year);
$where = $db->quoteInto('id IN (?)', $ids);
$db->update('table_name', $bind, $where);
}
如果沒有或只有很少的通用值,並且更新不能折疊成幾個語句怎么辦? 在這種情況下,本文將說明以下方法:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.