我尝试加载大约30.000条记录到mysql select。比我得到这个警告。 而且我试图将它们分解成更小的限制。每1000个。但为什么我仍然得到这个警告?
这是我的代码:
function processDataDb()
{
$rowIncrement = 1000;
$query = "SELECT count( * ) as totalfield FROM `isc_xml_data` ";
$result = mysql_query($query) or die ("$query" . mysql_error());
if ($result)
{
$row = mysql_fetch_assoc($result);
$total_row = $row['totalfield'];
for($i = 0; $i < $total_row ; $i+=$rowIncrement)
{
$sql_c = "SELECT * FROM isc_xml_data order by id LIMIT " . $i . " , " . ($i + $rowIncrement - 1);
$res_c = mysql_query($sql_c) or die (mysql_error());
while($row = mysql_fetch_object($res_c))
{
echo $row->id."\n";
$this->insertAndUpdateProduct($row->xmldata);
}
unset($res_c);
}
} else {
echo "result is unavailable";
}
}
感谢您的帮助。
答案 0 :(得分:1)
$sql_c = "SELECT * FROM isc_xml_data order by id LIMIT " .
$i . " , " . ($i + $rowIncrement - 1);
http://dev.mysql.com/doc/refman/5.0/en/select.html#id714605
LIMIT
的第二个参数是你想要多少,而不是上限;试试$rowIncrement
。
答案 1 :(得分:0)
unset($res_c);
这是无效的,有mysql_free_result($res_c)
功能。
此外,您可以在没有count(*)
的第一次查询的情况下执行此操作 - 只需进行循环查询,直到至少返回一行。
答案 2 :(得分:0)
由于这一行:
$this->insertAndUpdateProduct($row->xmldata);
你的 XML处理在内存方面非常低效,
而mysql只消耗一行内容。