使用PHP在两个不同服务器中联接两个表(Foreach)

时间:2018-08-09 10:30:03

标签: php mysql database foreach

enter image description here

我在两个不同的服务器上有两个数据库。

在这两个数据库中,我有两个表名为“ orders”。 (参见图片)

database2的订单表中有一些我需要的信息,例如列“ import”和“ shipping”。

为了连接两个表,我使用了两个foreach循环:

<?php
$all=array();

// get 100 Records from 30 000 Records (Database1) because i work with pagination
$ordersFromDB1="SELECT * FROM orders LIMIT 0,100"; 

// get all 10 0000 Records for checking (Database2)
$ordersFromDB2="SELECT * FROM orders"; 

foreach ($ordersFromDB1 as $order1) {  //100 times

    foreach ($ordersFromDB2 as $order2) {  //10 000 times


        if ($order1['ID_order']==$order2['ID_order']) {

           //put column "import" from order2 in order1
           $order1['import']=$order2['import'];

           // put column "shipping" from order2 in order1
           $order1['shipping']=$order2['shipping'];

         }
   }

   $all[]=$order1;
}
//foreach loop will be execute 100 * 10 000 = 1 000 000 times

// $all stoke the two orders table (orders1,orders2) in one array

这段代码可以正常工作,但是如果您看到foreach循环将被执行100 * 10,000 = 1 000 000次,我认为这不是一个好主意。

有没有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

鉴于您的两个订单数组都具有以下格式:

$orders1 = array('order_id' => order)
$orders2 = array('order_id' => order)

您可以执行以下操作:

foreach ($orders2 as $id => $order2) {
    if (array_key_exists($id, $orders1)) {
        $orders1[$id]['import'] = $order2['import'];
    }
}

这将花费linear的时间来处理您的订单数量。

编辑: 将返回的数据库行转换为建议的格式也需要花费线性时间,因此比您最初的解决方案要有效得多。