【发布时间】:2018-12-21 13:32:42
【问题描述】:
我有 2 个具有不同数据库和服务器的表。服务器 1 中的表 1 包含 destination 和 invoice no 列,服务器 2 中的表 2 包含 Invoice No 和 Total 列。
我需要总结所有destination 中的total。两个表的唯一匹配值是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 中总结?
【问题讨论】:
-
您还可以运行一个循环来提取所有发票编号。然后运行单个查询以一次性提取所有数据。打开连接是一项非常耗时的操作,在您的情况下,复杂的选择会提高您的速度。
-
检查this。这可能有助于加入交叉
mysql服务器。