php - Mysql PHP 脚本变慢需要重构

标签 php mysql

您好,我有 2 个 mysql 表,它们都需要更新,

companies
unique_code

公司拥有 100 万条记录,我需要为每条记录分配一个唯一代码,我遇到的问题是我的 PHP 脚本抓取了所有公司,并在 foreach 循环中从表 unique_code 抓取一个唯一代码并更新,然后它还会更新 unique_code用于标记已使用代码的表格。

PHP 代码挂起很长时间并达到最大执行限制。我真的很困惑,需要这些公司有一个独特的代码,谁能想到另一种方法?

精简代码示例。

 foreach ($aCompanies as $companies){

   $query="SELECT * FROM unique_code WHERE used = 0"

   foreach(unique_code as code){
       //  UPdate companies table
       $query = "UPDATE companies SET id = $code";
       // Flag code used
       $query = "UPDATE unique_codes WHERE code = $code";
   }
}

为你的时间干杯。

完整代码:

$query1 = "SELECT code FROM unique_codes WHERE used = 0\n";
$aUniqueCode = $oDbh->getAll($query1);

$query2 = "SELECT id FROM companies";
$aCompanies = $oDbh->getAll($query2);

foreach ($aCompanies as $companies){

    $query = "SELECT code FROM unique_codes WHERE used = '0' LIMIT 1";
    $oCode = $oDbh->getRow($query);

    $query3.= "UPDATE companies SET code = $oCode->code WHERE id = $companies->id\n";   

    $query4 = "UPDATE unique_codes SET used = '1' WHERE code = $oCode->code\n";
    $oDbh->query($query4);      
}
print print_r($query3).';';
exit;

我所做的不是更新公司,而是将所有 SQL 导出到一个文件,以便日后导入。

最佳答案

如果您只是想向表中添加一个新的主键(因此是一次性过程),请不要在 PHP 中执行此操作。直接使用 MySQL 并使用 alter table 即可完成工作。 MySQL直接会更快,不会像PHP那样遇到长进程的计时问题。

如果您正在尝试做其他事情,您可能想要提供更多的表架构,我不太清楚我的目标是否正确。

关于php - Mysql PHP 脚本变慢需要重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2177156/

相关文章:

php - SELECT 查询返回警告(期望参数 1 为资源)

php - 在 AJAX 页面中获取数据

php - 对具有可接受的 NULL 值的多个表执行 JOIN

android - 将新项目插入 MySQL 后刷新 ListView

javascript - AJAX中使用URL跳转到页面

php - 获取 Mysql $Row 和查询

php - YII CGridView。试图显示其他表的属性。关系不工作

java - "java.sql.SQLException: Field ' id_parent ' doesn' t have a default value"与一对多关系映射

mysql - 使用group by时如何在单列中获取多个值?

mysql - MySQL 中的多等级