gpt4 book ai didi

PHP - 缩短对来自不同服务器的表运行查询的时间

转载 作者:行者123 更新时间:2023-11-29 17:19:49 25 4
gpt4 key购买 nike

我有 2 个表,它们具有不同的数据库和服务器。服务器 1 中的表 1 保存 destinationinvoice no列,服务器 2 中的表 2 包含 Invoice NoTotal列。

enter image description here

我需要总结一下total全部destination 。两个表的唯一匹配值是 invoice no ,其中WS10001 =10001 。我正在做的方法是 select来自服务器 1 和表 1 的所有值,使用 foreach循环这些值并在服务器 2 中运行表 2 中的查询来总结 total .

$sql ="select * from table1 group by destination";
$result=mysql_query($sql) or die(mysql_error());

while($myrow=MySQL_fetch_array($result,MYSQL_ASSOC))
{
extract($myrow);
$invno=$myrow[2];

sql2 = "select total from table2 where invoice_no like '%$invno%'";
$result2 = mysqli_query($conn, $sql);

while ($row=mysqli_fetch_row($result2)) {
$value = $row[0];
}

if (destination == "Washington")
{ $wstotal += $value;}
else if (destination == "Hawaii")
{ $wstotal += $value;}
else if (destination == "Budapest")
{ $wstotal += $value;}
}

当我使用示例表来运行包含 100 条记录的表时,此方法运行得非常快,但是当我将其应用于包含超过 10000 条记录的实际表时,它会运行几个小时才能完成,因为它必须运行查询每个 foreach 循环。
有什么方法可以缩短完成它的时间,或者我可以保存两个表中的所有值,在 php 中求和吗?

最佳答案

您可以使用 GROUP BY 和 SUM 来获取每个目的地的总和:

SELECT SUM(total) as total 
FROM table2
WHERE destination IN ('Washington','Hawaii','Budapest')
AND invoice_no LIKE '%$invno%'
GROUP BY destination

这样,数据库不需要记住整个数据集,只需记住分组的总和,在本例中最多为 3 个结果(这不是 100% 准确,但目前足够了)。

您还可以使用 IN() 进一步减少数据集,IN() 比 LIKE 快得多。

如果您在“目标”(或具有在查询中经常使用的各种不同值的另一列)上没有索引:在其上添加索引。这将缩短查找时间。

关于PHP - 缩短对来自不同服务器的表运行查询的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51320540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com