使用php(foreach)连接两个不同服务器中的两个表

fbcarpbf  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(266)


我在两个不同的服务器上有两个数据库。
在这两个数据库中,我有两个同名“orders”的表((见图片)
在database2的orders表中有一些我需要的信息,例如“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*10000=1000000次,我认为这不是一个好主意。
这个问题有更好的解决办法吗?

20jt8wwn

20jt8wwn1#

假设两个顺序数组的格式都是:

$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 关于订单数量的时间。
编辑:将返回的db行转换为建议的格式也需要线性时间,因此仍然比初始解决方案效率更高。

相关问题