微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我必须遍历查询 1 中的 9600 个 DISTINCT 域并更新查询 2 中第二个表中的 id

如何解决我必须遍历查询 1 中的 9600 个 DISTINCT 域并更新查询 2 中第二个表中的 id

查询需要永远更新第二个表中的所有域。

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

$MysqLi = new MysqLi("localhost","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-values 并且它们对于 mysql 来说是干净和安全的。如果它们能够通过用户输入进行操作,请确保您进行了消毒,或者甚至更好:使用准备好的语句。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。