【问题标题】:Join query of two databases in codeigniter在codeigniter中加入两个数据库的查询
【发布时间】:2012-12-19 00:54:20
【问题描述】:

我需要编写来自两个数据库的两个表的连接查询并获取连接的数据。 例如,考虑我有一个数据库 db1,其中有一些名为公司、计划、客户的表。假设我需要通过使用类似列对它们进行分组来将两个表 company 和 plan 与另一个数据库 db2 上的另一个表“cdr”连接起来。

我现在正在运行的查询如下:

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

但我的查询没有获取数据并引发错误。同样的查询,我在单个数据库上运行并且正在工作。但我需要帮助才能找到如何使用两个数据库来完成此操作。

【问题讨论】:

  • "但是我的查询没有获取数据并抛出错误。"它抛出了什么错误?

标签: php mysql join codeigniter-2 multiple-databases


【解决方案1】:

我在 DB1 中有表 x,其中包含 id、name 和 y_id。 在 DB2 中有一个带有 id 和 name 的 y 表

因此,如果您需要在同一个查询中获取 x 和 y 的名称,这就是您的答案:

    $db = $this->load->database("DB2", TRUE);
    $DB = $this->load->database("DB1", TRUE);
    $DB->select('x.name as name1, y.name as name2');
    $DB->from('x');
    $DB->join($db->database.'.y','x.y_id = y.id');
    $res = $DB->get();

【讨论】:

  • 如果两个数据库在不同的服务器上怎么办。那我怎样才能得到记录。
  • @Jitendra 你在不同的服务器上有解决方案吗?谢谢
【解决方案2】:

如果您需要连接两个数据库表,您只需给出以下内容:

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

这里其实不用给连接变量DB1或DB2,只要给$this->db即可。

【讨论】:

  • 如果数据库运行在不同的机器上会怎样?
  • 我有同样的情况,两个数据库都在不同的服务器上。那我怎样才能得到记录。
猜你喜欢
  • 2017-11-15
  • 2016-01-25
  • 2020-02-17
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-10
  • 1970-01-01
相关资源
最近更新 更多