Php 如何在使用JOIN LEFT时分隔两个同名列?
MySQL表如下所示: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
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')代码>而且它也起作用了!