【问题标题】:Codeigniter MySQL a Join Query with a column name collision in the resultsCodeigniter MySQL a Join Query 与结果中的列名冲突
【发布时间】:2012-10-11 07:04:17
【问题描述】:

我有一个非常常见的、普通的 JOIN 查询,我在其中发现自己陷入了困境。

我的 CI DB 查询如下所示:

    $this->db->select()
    ->from('user_event')
    ->join('game_bridge', 'user_event.gmeID = game_bridge.gmeID')
    ->where('user_event.memID', $memID);

直到大约一分钟前我才意识到,两个表都有一个“位置”列,但是两个列都包含我正在寻找的整体查询结果的唯一数据集。有没有办法给一个位置列或另一个别名,以便我可以在不同的属性名称下访问结果对象?

如果是这样,我该如何使用 CI 的 DB 类/助手来做到这一点?

【问题讨论】:

  • 必须使用 CI 的活动记录(或者他们称之为)吗?
  • 不幸的是,是的,在这个特定的项目中,在其当前的开发阶段使用“CI”活动记录是必须的。如果由我决定,我很可能会将 Docturine 插入其中,然后运行。或使用 Zend

标签: php mysql codeigniter orm


【解决方案1】:

如果您想从两个表中获取位置,您必须为其中一个或两个表指定别名 保留 user_event 位置,因为它只是为 game_bridge 提供别名,就像 game_bridge.location 作为 game_location

$this->db->select('location,game_bridge.location as game_location')

【讨论】:

  • 啊.. 是的.. 数字,我总是忘记你可以在select() 中做这样的事情。谢谢
【解决方案2】:

您可以在查询中设置别名。

$this->db->select('user_event.location as u_loc, game_bridge.location as g_loc');

但在这种情况下,您必须枚举所有要选择的字段。

【讨论】:

  • 现在这是否会限制我在 2 个表的概念中的结果,我最终想要来自所有列的所有数据,而不仅仅是位置列。或者 CI 是否足够聪明,知道我只想对这 2 个执行此操作,但仍会调用其余列名,或者我应该以类似的方式为其余列名效仿,减去不需要的列名的别名他们
  • 你可以这样做:$this->db->select('*, game_bridge.location as g_loc');
猜你喜欢
  • 2017-09-27
  • 1970-01-01
  • 2023-03-27
  • 2014-11-08
  • 2013-07-11
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多