2013-01-04 7 views
5

Potrzebuję napisać zapytanie o połączenie dwóch tabel z dwóch baz danych i pobrać połączone dane. Na przykład, rozważ mam bazę danych db1, która ma kilka tabel o nazwach firm, planów, klientów. Załóżmy, że muszę dołączyć do dwóch tabel firm i planów z inną tabelą "cdr" w innej bazie danych db2, grupując je za pomocą podobnej kolumny.Połączyć kwerendę dwóch baz danych w kodzie sygnaturowym

Zapytanie który używam w tej chwili znajduje się poniżej:

function get_per_company_total_use ($custid) 
     {   
       $this->DB1->select('ph_Companies.CompanyName'); 
       $this->DB1->where('ph_Companies.Cust_ID', $custid); 
       $this->DB2->select_sum('cdr.call_length_billable')->from('cdr'); 
       $this->DB2->group_by('cdr.CompanyName'); 
       $this->db->join('Kalix2.ph_Companies', 'Kalix2.ph_Companies.CompanyName = Asterisk.cdr.CompanyName'); 
       $query = $this->db->get(); 
       if($query->result()){ 
        foreach ($query->result() as $value) { 
         $companies[]= array($value->CompanyName,$value->call_length_billable); 
          } 
        return $companies; 
       } 
       else 
        return FALSE; 
     } 

Ale moje zapytanie nie jest pobieranie danych i rzuca błąd. To samo pytanie, uruchomiłem na jednej bazie danych i działa. Ale potrzebuję pomocy, aby znaleźć sposób, w jaki można to zrobić za pomocą dwóch baz danych.

+0

"Ale moje zapytanie nie pobiera danych i nie powoduje błędu." Jaki błąd rzuca? –

Odpowiedz

4

Wystarczy podać następujące informacje, jeśli trzeba połączyć dwie tabele bazy danych:

function get_per_company_total_use ($custid) 
     {   
       $this->db->select('Kalix2.ph_Companies.CompanyName'); 
       $this->db->where('Kalix2.ph_Companies.Cust_ID', $custid); 
       $this->db->select_sum('Asterisk.cdr.call_length_billable')->from('Asterisk.cdr'); 
       $this->db->group_by('Asterisk.cdr.CompanyName'); 
       $this->db->join('Kalix2.ph_Companies', 'Kalix2.ph_Companies.CompanyName = Asterisk.cdr.CompanyName'); 
       $query = $this->db->get(); 
       if($query->result()){ 
        foreach ($query->result() as $value) { 
         $companies[]= array($value->CompanyName,$value->call_length_billable); 
          } 
        return $companies; 
       } 
       else 
        return FALSE; 
     } 

Tutaj rzeczywiście nie musisz dać POŁĄCZENIE zmienną DB1 lub DB2, po prostu dać $ this-> db.

+0

co zrobić, jeśli bazy danych są uruchamiane na różnych komputerach? –

Powiązane problemy