我必须在查询 1 中循环遍历 9600 个 DISTINCT 域,并在查询 2 中立即更新一个 id table

I have to loop through 9600 DISTINCT Domains in query 1 and Update an id in a second table in Query 2

查询需要很长时间才能更新第二个 table 中的所有域。

也许有更有效的方法来解决这个问题?

$mysqli = new mysqli("localhost","xxxx","xxxx","xxx");

if ($mysqli -> connect_errno) {
  echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
  exit();
}

// Perform queries
$result = $mysqli->query(SELECT DISTINCT dom FROM pmcts_mt_pipeline_details);

$rows = $result->fetch_all(MYSQLI_ASSOC);
foreach ($rows as $row) {
$dom = $row['dom'];
$mysqli->query("UPDATE pmcts_email_marketing_companies_pharma_all_unique SET id_ind_mailer=1 WHERE email_dom='$dom' AND (mailerdaemon=0 AND mail_excluded=0 AND unsubscribe=0 AND changeto=0)");
}

慢的可能不是查询,而是循环。 PHP 中的循环很慢。

您想为所有匹配的行更新一个值,您可以使用 IN():

$result = $mysqli->query(SELECT DISTINCT dom FROM pmcts_mt_pipeline_details);
$rows = $result->fetch_all(MYSQLI_ASSOC);
$doms = array_column($rows, 'dom'); // *
$domsString = implode("','", $doms)

* 我不是 100% 了解数组列,但目标是获取所有值 - 仅在数组中

UPDATE pmcts_email_marketing_companies_pharma_all_unique 
SET id_ind_mailer=1 
WHERE email_dom IN ('".$domsString."') 
   AND (
      mailerdaemon=0 
      AND mail_excluded=0 
      AND unsubscribe=0
      AND changeto=0
   )

注意: 我假设您可以控制 $dom 值,并且它们对于 mysql 是干净且安全的。如果它们能够通过用户输入进行操作,请确保您进行了清理,或者更好:使用准备好的语句。