Php 如何在使用JOIN LEFT时分隔两个同名列?

Php 如何在使用JOIN LEFT时分隔两个同名列?,php,mysql,codeigniter-2,Php,Mysql,Codeigniter 2,MySQL表如下所示: markers id, tid, lat, lng 1 1 42.000 2.500 2 1 41.000 2.400 3 2 40.000 2.300 markers_types id, name, image 1 TYPE1 type1.png 2 TYPE2 type2.png $this->db->select('markers.t

MySQL表如下所示:

markers
id, tid,        lat,    lng
1   1           42.000  2.500
2   1           41.000  2.400
3   2           40.000  2.300

markers_types
id, name,   image
1   TYPE1   type1.png
2   TYPE2   type2.png
$this->db->select('markers.type_id as m_id, markers.lat, markers.lng, markers_types.id as mt_id, markers_types.name, markers_types.image');
使用CodeIgniter的活动记录时:

function get_coordinates(){

    $this->db->select('*');
    $this->db->from('markers');
    $this->db->join('markers_types', 'markers.tid = markers_types.id');
    $this->db->where('state', 1);
    $query = $this->db->get();

    if( $query->result() < 1 ) return FALSE;

    $results = $query->result();
    return $results;

}
函数get_坐标(){ $this->db->select('*'); $this->db->from('markers'); $this->db->join('markers\u types','markers.tid=markers\u types.id'); $this->db->where('state',1); $query=$this->db->get(); if($query->result()<1)返回FALSE; $results=$query->result(); 返回$results; }
它将两个不同表中名为
id
的两列连接(或合并)为一列。如何预防?有没有可能在不重命名的情况下阻止合并这些列?

只需修改
$this->db->select('*')语句,列出要在响应中捕获的各个table.field名称

$this->db->select('markers.type_id, markers.lat, markers.lng, markers_types.id, markers_types.name, markers_types.image');

与DevlshOne的回答类似,我将使用显式选择值,但为了区分,您也可以将选择值别名,如下所示:

markers
id, tid,        lat,    lng
1   1           42.000  2.500
2   1           41.000  2.400
3   2           40.000  2.300

markers_types
id, name,   image
1   TYPE1   type1.png
2   TYPE2   type2.png
$this->db->select('markers.type_id as m_id, markers.lat, markers.lng, markers_types.id as mt_id, markers_types.name, markers_types.image');

修改您的
$this->db->select('*')语句列出要在响应中捕获的单个表名。字段名。您所指的“合并”实际上是将定义联接的不同表中的记录关联起来的标准。如果这不是您想要的,您可以指定一个交叉联接,给出两个表的笛卡尔乘积。我无法帮助您使用代码点火器语法来指定这一点。请减少10%的惰性,并选择标记。*、标记\u类型.name、标记\u类型.image
或减少90%的惰性,只指定您感兴趣的字段,或减少100%的惰性,并为列提供实际描述性的别名,aka
选择markers\u types.name作为“marker\u type\u name”
。我试过
$this->db->select('markers.*')
,直到我在执行
foreach($I){$I->image}
时出错,告诉我:
未定义的属性:stdClass::$image
有什么建议吗?@Sammitch谢谢,很有效!谢谢,实际上我用@Sammitch建议的方法尝试了这个,
$this->db->select('markers.*,markers\u types.name,markers\u types.image')而且它也起作用了!