Codeigniter MySQL a Join Query 与结果中的列名冲突

Posted

技术标签:

【中文标题】Codeigniter MySQL a Join Query 与结果中的列名冲突【英文标题】:Codeigniter MySQL a Join Query with a column name collision in the results 【发布时间】: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 【参考方案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');

以上是关于Codeigniter MySQL a Join Query 与结果中的列名冲突的主要内容,如果未能解决你的问题,请参考以下文章

在 php codeigniter 中使用 join/concat 的 mysql 查询结果

在codeigniter和mysql中过滤多个时间段的sql记录?

在 mysql codeigniter 中加入 3 个表

重复的 SQL 导致 JOIN - Codeigniter

如何在 Codeigniter 中加入三个表

Codeigniter join 会返回最后一个 id