CodeIgniter中表A双列关联表B单列的查询结果异常问题
问题排查与解决
核心问题分析
- 关联条件错误:第二次关联
Table B时,虽然给表起了别名t1,但关联条件写成了Table A.to=Table B.id,实际应该关联别名t1的id,导致目的地关联逻辑失效。 - 字段重名覆盖:查询结果中两个
dname字段完全重名,PHP返回的对象只会保留第一个dname的值,无法区分出发地和目的地的城市名称。 - 输出字段错误:输出时两次调用的都是同一个
dname字段,自然得到重复结果。
修正后的完整代码
// 明确指定查询字段,给两个城市名称字段设置别名 $this->db->select('`Table A`.*, `Table B`.dname AS from_dname, t1.dname AS to_dname'); $this->db->where('`Table A`.id', 1); $this->db->from('`Table A`'); // 关联出发地对应的城市数据 $this->db->join('`Table B`', '`Table A`.`From` = `Table B`.id'); // 修正关联条件,使用别名t1关联目的地对应的城市数据 $this->db->join('`Table B` AS t1', '`Table A`.`To` = t1.id'); $orders = $this->db->get()->row(); // 输出别名对应的出发地和目的地名称 echo $orders->from_dname . ' - ' . $orders->to_dname;
关键修正说明
- 字段别名处理:通过
AS给两个dname分别命名为from_dname和to_dname,避免字段名重复导致的覆盖问题。 - 关联条件修正:第二次join的条件改为
Table A.To = t1.id,让目的地To字段正确关联到别名t1表的id。 - 表名转义:因为表名包含空格,用反引号
`包裹表名和字段名,避免SQL语法错误。
内容的提问来源于stack exchange,提问作者Cool Perfectionist
相关产品推荐
相关产品推荐

