2013-01-04 38 views
5

Tôi cần phải viết truy vấn nối của hai bảng từ hai cơ sở dữ liệu và tìm nạp dữ liệu đã nối. Ví dụ: hãy xem xét tôi có cơ sở dữ liệu db1 có một số bảng có tên là công ty, kế hoạch, khách hàng. Giả sử tôi cần tham gia hai công ty bảng và các kế hoạch với một bảng 'cdr' khác trên cơ sở dữ liệu db2 bằng cách nhóm chúng lại bằng một cột tương tự.Tham gia truy vấn của hai cơ sở dữ liệu trong mã vạch

Các truy vấn mà tôi đang chạy ngay bây giờ được đưa ra dưới đây:

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

Nhưng truy vấn của tôi không lấy dữ liệu và ném một lỗi. Cùng một truy vấn này, tôi đã chạy trên một cơ sở dữ liệu duy nhất và đang hoạt động. Nhưng tôi cần sự giúp đỡ để tìm hiểu cách thức này có thể được thực hiện với hai cơ sở dữ liệu.

+0

"Nhưng truy vấn của tôi không tìm nạp dữ liệu và đưa ra lỗi". Đó là lỗi gì? –

Trả lời

4

Bạn chỉ có thể cung cấp những điều sau nếu bạn cần tham gia hai bảng cơ sở dữ liệu:

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

Đây thực sự bạn không cần phải cung cấp cho các kết nối DB1 biến hoặc DB2, chỉ cần cung cấp $ this-> db.

+0

nếu cơ sở dữ liệu được chạy trên các máy khác nhau thì sao? –

Các vấn đề liên quan