从具有交叉条件的CI格式的两个diff数据库中获取数据


$this->fifo_db->select('u.name,d.title');
$this->fifo_db->from('tbl_user u');
$this->db->join('designations d','d.id = u.designationid','left');
$this->db->where(array('u.designationid > ' => 1,'d.salary > ' => '20000'));
$query = $this->fifo_db->get();
return $query->result_array();

试图在来自不同DB的两个表上使用联接来获取CI格式的数据,在同一个表上出现错误。

我认为您需要在表引用前面加上数据库的名称。

由于以下几个原因,此代码不使用查询生成器或表别名。

  1. 要证明多个数据库的概念,编写完整的查询字符串
  2. 我不确定别名的工作效果如何使用数据库名称前缀,也不知道在包含数据库名称时如何别名

我检查db->query的返回,因为如果查询导致错误,它将为FALSE。如果$query为FALSE,则对$query->result_array()的调用将导致引发异常。

您需要实际的数据库名称。我编了dbUdbD的名字。

$sql = "SELECT dbU.tbl_user.name, dbD.designations.title FROM dbU.tbl_user  
LEFT JOIN dbD.designations ON dbD.designations.id = dbU.tbl_user.designationid
WHERE dbU.tbl_user.designationid > 1 AND dbD.designations.salary > 20000";
$query = $this->db->query($sql);
if($query !== FALSE)
{
return $query->result_array();
}
return NULL;

我认为使用哪个CI数据库对象(fifo_dbdb(并不重要。我很确定数据库需要在同一个网络服务器上。

如果以上方法有效,您可以添加别名,然后,如果有效,则重构它以使用查询生成器。坦率地说,根据显示的查询,我看不出有任何理由使用QB。但你可能有更复杂的需求,你没有分享。

最新更新