我在两个不同的服务器上有两个数据库。
在这两个数据库中,我有两个表名为“ 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次,我认为这不是一个好主意。
有没有更好的解决方案?
答案 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
的时间来处理您的订单数量。
编辑: 将返回的数据库行转换为建议的格式也需要花费线性时间,因此比您最初的解决方案要有效得多。