PHP中的嵌套SQL查询while循环导致内存泄漏-还有哪些解决方案?

PHP中的嵌套SQL查询while循环导致内存泄漏-还有哪些解决方案?,php,mysql,sql,memory-leaks,sql-update,Php,Mysql,Sql,Memory Leaks,Sql Update,说明:我试图通过将代码与partnumber进行比较并更新行,将项目的定价从一个表转移到另一个表。临时表包含: code price M1 1.23 M2 4.56 M3 7.89 partnumber price M2 0.00 M3 0.00 M1 0.00 第二个表包含: code price M1 1.23 M2

说明:我试图通过将代码与partnumber进行比较并更新行,将项目的定价从一个表转移到另一个表。临时表包含:

code        price
M1          1.23
M2          4.56
M3          7.89
partnumber  price
M2          0.00
M3          0.00
M1          0.00
第二个表包含:

code        price
M1          1.23
M2          4.56
M3          7.89
partnumber  price
M2          0.00
M3          0.00
M1          0.00
问题是我随意地将一个mysql_查询嵌套在一个while循环中,因此导致内存泄漏。我有大约70000行数据,它在大约160行爆炸了。我应该如何将临时表temp\u yahooprices中的数据引入组合股票?请记住,服务器只运行PHP4,因此我无法编写准备好的PDO语句。相关代码粘贴在下面,SQL查询被注释掉:

//Import Price Data
echo 'Attempting to write Yahoo pricing data...
      <div style="margin:20px; border:1px solid #C0C0C0; overflow:scroll; height:200px; width:50%;">';
$query = "CREATE TABLE temp_yahooprices
          AS (SELECT DISTINCT
          Code AS code, 
          `Sale-price` AS price
          FROM nteproject.ynmdataz
          ORDER BY Code);";
    $result = mysql_query($query) or die('ERROR: Could not create temporary Yahoo pricing table. ' . mysql_error() . '<br>');
$query = "SELECT * FROM temp_yahooprices";
    $result = mysql_query($query);
while($row = mysql_fetch_assoc($result)) {
    $price = $row['price'];
    $code = $row['code'];
    echo '<b>' . $code . '</b> = ' . $price . '<br>';
    //mysql_query("UPDATE combined_stock SET price=$price WHERE partnumber='$code'") or die("There was a problem updating pricing columns: " . mysql_error());
}
echo '</div> Pricing column was successfully created.<br><br>';

您可以通过一条SQL语句很好地完成这一切:

UPDATE combined_stock dest LEFT JOIN (
    SELECT price, code FROM temp_yahooprices
) src ON dest.partnumber = src.code
SET dest.price = src.price

这将基于temp_yahooprices的数据创建一个名为src的临时表。然后,它将遍历您的目标表,并更新目标零件号等于源代码的所有元素,并更新其价格。

非常感谢@NTA所以我在寻找SQL解决方案时纯粹是从PHP解决这个问题的!哈,很高兴我能帮忙。我完全明白你的意思,因为不久前,我还试图用PHP解决太多的问题,当一个好的SQL命令通常更快、更优雅的时候:Quick question-我在将它放入脚本之前执行了这个语句,当然,这需要很长时间才能在页面上给我一个502错误,即使它仍在进程中运行。我在30分钟内把它杀了。这些表肯定是按它们应该的方式填充的,但是您认为整个数据集需要多长时间?嗯,奇怪。70000行?这可能只需要几秒钟。代码和零件号是否唯一?他们有索引吗?零件号在ID列中使用数字自动递增。临时表没有索引