首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL/PHP无法保存结果集

MYSQL/PHP无法保存结果集
EN

Stack Overflow用户
提问于 2011-04-17 03:34:13
回答 1查看 6.4K关注 0票数 1

我正在运行一个PHP脚本,它基本上试图从MYSQL数据库中找到匹配的名称,然后将相同的编号分配给具有相同名称的记录。

我的问题是,纪录的数目约为150万。该脚本每次运行约14个小时,并给出以下错误: mysql_query无法将结果集保存在xx上的line中。而phpmyadmin给出了这个错误#2008出于记忆

这是我的php代码

代码语言:javascript
复制
mysql_query("SET SQL_BIG_TABLES=1");

$res = mysql_query("SELECT company_name, country, id FROM proj")
       or die (mysql_error());

while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
    $res1 = mysql_query("SELECT company_name, id FROM proj WHERE country='$row[1]'"+
          "AND id<>'$row[2]'") or die ("here".mysql_error().mysql_errno());

    while ($row1 = mysql_fetch_array($res1, MYSQL_NUM)) {
          //My calculations here 
    }
}
EN

回答 1

Stack Overflow用户

发布于 2011-04-17 05:10:39

好的。您的查询效率极低。你在评论中说有150万行。

  1. on创建一个包含所有150万行的结果集--
  2. on创建一个包含所有150万行的新结果集,但具有与您正在循环的行相同的行除外。因此,基本上您正在处理150万*(150万- 1)行= 2,249,998,500,000,000= 2.25万亿行

换句话说,这不仅是令人难以置信的低效--这是绝对可笑的。如果您似乎只想按国家提取行,为什么不这样做:

代码语言:javascript
复制
$sql1 = "SELECT DISTINCT country FROM proj";
$res1 = mysql_query($sql1) or die(mysql_error());

while($row1 = mysql_fetch_associ($res1)) {
    $country = $row1['country'];
    $escaped_country = mysql_real_escape_string($country);
    $sql2 = "SELECT company_name, id FROM proj WHERE country='$country'";
    $res2 = mysql_query($sql2) or die(mysql_error());
    while ($row2 = mysql_fetch_assoc($res2)) {
       ... calculations ...
    }
}

这只会从数据库中获取150万+#的国家记录,这远远低于你的版本的2.3万亿。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5691262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档