php - 从两个具有交叉条件的 CI 格式的差异数据库中获取数据
问题描述
$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();
尝试使用来自不同数据库的两个表的连接来获取 CI 格式的数据,但同时出现错误。
解决方案
我认为您需要在表引用前加上数据库名称。
出于几个原因,此代码不使用查询生成器或表别名。
- 为了证明多个数据库的概念,编写完整的查询字符串更容易。
- 我不确定别名如何与数据库名称前缀一起工作,我也不知道在包含数据库名称时如何使用别名。
我检查返回,db->query
因为如果查询导致错误,它将是 FALSE。如果$query
为 FALSE,则调用$query->result_array()
将导致抛出异常。
您需要实际的数据库名称。我已经编好了名字dbU
和dbD
。
$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_db
或db
)并不重要。我很确定数据库需要位于同一网络服务器上。
如果上述方法有效,您可以添加别名,然后,如果有效,请将其重构为使用查询生成器。坦率地说,根据显示的查询,我没有看到 QB 的任何理由。但是你可能有更复杂的需求,你没有分享。
推荐阅读
- php - 如何在 php echo 中使用 getElementById
- javascript - 如何通过css值选择元素的子元素
- azure - Azure 服务总线主题使用
- powershell - 如何将嵌套数组中的单个对象表示为数组?
- python - pyspark:在 txt 文件中的不同行之间叠加
- azure - AppStoreRelease 期间 Azure 管道失败
- android - 当应用程序运行时,我的第二个活动的内容没有显示。感谢您的帮助
- autodesk-forge - 如何从 Forge 查看器获取 Revit 文件中的资产/房间/楼层、空间列表
- android - 数据库。数据库异常:Firebase 数据库路径无效?
- angular - Angular 材质扩展链接预览错误