您好,我有 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/