2013-08-30 2 views
0

Я пытаюсь выяснить, как объединить результаты из той же таблицы в двух базах mysql, используя codeigniter.Объединение результатов из 2 баз данных в codeigniter

Обе таблицы имеют одинаковые имена столбцов, но базы данных имеют разные настройки соединения.

Я сейчас пытаюсь это:

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. Однако это не может работать, потому что оно не распознает имена db как базы данных (и в любом случае у него не будет настроек соединения для каждого db таким образом). Я думаю, что ORDER BY тоже не в том месте. Я не уверен, где я должен указать db для каждого запроса или если этот метод будет работать вообще.

Любые идеи?

ответ

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