结合codeigniter中的2个数据库的结果

时间:2013-08-30 12:07:09

标签: mysql codeigniter union multiple-databases

我正在尝试使用codeigniter来解决如何在2个mysql数据库中组合同一个表的结果。

两个表都具有相同的列名,但数据库具有不同的连接设置。

我正在尝试这个:

public function getAllNames() {

$sql1 = <<SQL
        SELECT 
          id, name, CONCAT(name, ' (', id, ')') AS name2
        FROM
          db1.table
        ORDER BY name
SQL;

$sql2 = <<SQL
        SELECT 
          id, name, CONCAT(name, ' (', id, ')') AS name2
        FROM
          db2.table
        ORDER BY name
SQL;

$q = $this->db->query($sql1." UNION ".$sql2);

return $q->result();

}

在2个变量中为每个数据库存储相同的查询,然后尝试使用UNION组合它们。但是,这不起作用,因为它无法将数据库名称识别为数据库(并且无论如何都不会以这种方式为每个数据库设置连接设置)。我认为ORDER BYs在这里也是错误的。我不确定在哪里为每个查询指定数据库,或者这个方法是否可行。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

实际上,接受的答案不起作用,因为查询函数不返回数组,而是返回database result object

this question所示,您需要调用结果函数,该函数返回一个对象数组(或 result_array ,返回一个数组数组),并合并这些数组:

使用结果

$array_1 = $this->db->get()->result();
$array_2 = $this->db->get()->result();
$final_array = array_merge($array_1, $array_2);

foreach ($final_array as $row){
    echo $row->id;
    echo $row->description;
}

使用 result_array

$array_1 = $this->db->get()->result_array();
$array_2 = $this->db->get()->result_array();
$final_array = array_merge($array_1, $array_2);

foreach ($final_array as $row){
    echo $row['id'];
    echo $row['description'];
}

答案 1 :(得分:1)

尝试

$DB1 = $this->load->database('db1');
$DB2 = $this->load->database('db2');

$res1 = $DB1->query($sql1);
$res2 = $DB2->query($sql2);
$result = array_merge($res1 , $res2);