我有一個帶有郵編數據的60400行「小」表,共6mb。我想遍歷它們,更新列值,然後保存它。在遍歷行集時內存不足
以下是延伸My_Db_Table認爲,一totalRows功能我郵編模型的一部分 - (60400行)
public function normalizeTable() {
$this->getAdapter()->setProfiler(false);
$totalRows = $this->totalRows();
$rowsPerQuery = 5;
for($i = 0; $i < $totalRows; $i = $i + $rowsPerQuery) {
$select = $this->select()->limit($i, $rowsPerQuery);
$rowset = $this->fetchAll($select);
foreach ($rowset as $row) {
$row->{self::$normalCityColumn} = $row->normalize($row->{self::$cityColumn});
$row->save();
}
unset($rowset);
}
}
我rowClass包含你猜對了..返回表中的行的總數規範化功能(基本上是一個metaphone包裝做一些額外的魔術)。
起初我嘗試了一個普通的舊$ this-> fetchAll(),但是馬上就出現了內存不足(128MB)。然後我試着將行集分成塊,唯一不同的是有些行實際上得到更新。但仍然出現內存錯誤。
如何,我可以acomplish任何想法,或者我應該退回到ye'olde的mysql_query()
可能是一個柵欄柱條件。嘗試$ i = $ i + $ rowsPerQuery -1; – barrycarter 2010-05-31 19:20:37
也許我應該提一下,我的問題是,我在分塊時仍然出現「內存不足」錯誤。 – Phliplip 2010-05-31 19:41:46