php - 如何使用PHP数组模拟SQL LEFT JOIN操作?

标签 php arrays left-join array-merge

我有一个连接到多个服务器的应用程序。其中一台服务器的 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/

相关文章:

Ruby:将数组项传递到 case 语句中

javascript - 从数组中获取数据

c - 在 C 语言中,为什么数组的地址等于它的值?

php - 特殊 ä ö 字符破坏 UTF-8 编码

php - 如何安全地转义 php for mysql 中的输入数据

php - 如何使用 avconv 连接一系列视频

php - 从用户处获取数据并在 python 脚本中使用该数据

mysql连接值之间的差异最小?

mysql - 选择查询 Yii2 中的左连接 - 'single' 中的未知列 'on clause'

来自 2 个数据库的 MYSQL 查询为第二个数据库提供 NULL