我有一个连接到多个服务器的应用程序。其中一台服务器的 ID 是位于另一台服务器上的表的外键。这里的问题是 MySQL 不支持链接服务器,所以我无法运行左查询来左连接位于不同服务器上的 2 个表。
因此,我必须使用 PHP 从 2 个不同的服务器提取 2 个单独的查询,并且它们使用 PHP 左连接。
请注意,下面列出的数组键必须是动态的。我不能使用固定名称,因为不同的查询将具有不同的列名称。下面的示例使用phone_call_id 作为连接两个数组的键,并且它组合了列名称。如果 $right_array 有更多列,则需要将这些列添加到最终数组中。
所以我有2个数组
$left_array =
Array
(
[0] => Array
(
[id] => 1
[start_on] => 2014-09-14 19:50:00
[end_on] => 2014-09-14 19:51:00
[subject] => This is a new event
[client_id] =>
[all_day_event] => 0
[event_type] => Event
[phone_call_id] => 122
)
[1] => Array
(
[id] => 2
[start_on] => 2014-09-15 05:53:00
[end_on] => 2014-09-15 06:53:00
[subject] => This is a new event
[client_id] =>
[all_day_event] => 0
[event_type] => Event
[phone_call_id] => 123
)
[2] => Array
(
[id] => 3
[start_on] => 2014-09-15 05:53:00
[end_on] => 2014-09-15 06:53:00
[subject] => This is a new event
[client_id] =>
[all_day_event] => 0
[event_type] => Event
[phone_call_id] =>
)
)
正确的数组将如下所示
$right_array =
Array
(
[0] => Array
(
[account_id] => 1
[phone_call_id] => 122
)
[1] => Array
(
[account_id] => 2
[phone_call_id] => 123
)
)
结果需要像这个数组
$joined_array =
Array
(
[0] => Array
(
[id] => 1
[start_on] => 2014-09-14 19:50:00
[end_on] => 2014-09-14 19:51:00
[subject] => This is a new event
[client_id] =>
[all_day_event] => 0
[event_type] => Event
[phone_call_id] => 122
[account_id] => 1
)
[1] => Array
(
[id] => 2
[start_on] => 2014-09-15 05:53:00
[end_on] => 2014-09-15 06:53:00
[subject] => This is a new event
[client_id] =>
[all_day_event] => 0
[event_type] => Event
[phone_call_id] => 123
[account_id] => 2
)
[2] => Array
(
[id] => 3
[start_on] => 2014-09-15 05:53:00
[end_on] => 2014-09-15 06:53:00
[subject] => This is a new event
[client_id] =>
[all_day_event] => 0
[event_type] => Event
[phone_call_id] =>
[account_id] =>
)
)
该函数模拟左连接操作
//function to simulate the left join
function left_join_array($left, $right, $left_join_on, $right_join_on = NULL){
$final= array();
if(empty($right_join_on))
$right_join_on = $left_join_on;
foreach($left AS $k => $v){
$final[$k] = $v;
foreach($right AS $kk => $vv){
if($v[$left_join_on] == $vv[$right_join_on]){
foreach($vv AS $key => $val)
$final[$k][$key] = $val;
} else {
foreach($vv AS $key => $val)
$final[$k][$key] = NULL;
}
}
}
return $final;
}
//该函数可以像这样使用,假设左侧数组中的列名与右侧数组中的列名相同
$final_array = left_join_array($left, $right, 'phone_call_id');
//该函数可以像这样使用,假设左侧数组中的列名“不同但具有相同的对应值”
$final_array = left_join_array($left, $right, 'phone_call_id', 'p_c_id');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)