2013-08-30 54 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']; 
}