我有一个连接到多个服务器的应用程序。其中一台服务器的 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');
关于php - 如何使用PHP数组模拟SQL LEFT JOIN操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25836473/