2013-08-30 86 views
0

我想了解如何结合使用codeigniter的2个mysql数据库中的同一个表的结果。在codeigniter中结合来自2个数据库的结果

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

目前,我正在尝试此:

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 BY在这里也是错误的地方。我不知道我应该在哪里为每个查询指定数据库,或者如果此方法可以工作。

任何想法?

回答

1

尝试像

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

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

我最终做了一个不同的方式,因为我发现从每张表需要的列不完全相同(尽管我被告知他们是!),但这工作。谢谢你,Gautam3164。 –

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']; 
}