CodeIgniter关联查询报错:Not unique table/alias: 'favorites_items'
解决CodeIgniter中"Not unique table/alias: 'favorites_items'"错误
嘿,这个错误的原因很直观——你在JOIN操作时不小心把favorites_items表和它自己关联了,而不是和你实际要查询的items表关联!数据库看到两个完全同名的表,没法区分它们的身份,所以抛出了这个"非唯一表/别名"的报错。
先看你生成的错误SQL语句:
SELECT favorites_items.*, items.* FROM favorites_items JOIN favorites_items ON id_item = items.id_ad
一眼就能发现问题:JOIN的目标表还是favorites_items,而不是你需要的items表,这直接导致了表名重复冲突。
再对应看你的CodeIgniter代码,问题出在join方法的第一个参数上:
$this->db->select('favorites_items.*,items.*'); $this->db->from('favorites_items'); $this->db->join('favorites_items', 'id_item = items.id_ad'); // 这里写错了关联目标表! $query = $this->db->get(); return $query->result_array();
修正后的代码
把JOIN的目标表改成items,同时建议明确写出关联字段的所属表(避免字段歧义):
$this->db->select('favorites_items.*, items.*'); $this->db->from('favorites_items'); // 关联items表,明确指定关联字段的来源表 $this->db->join('items', 'favorites_items.id_item = items.id_ad'); $query = $this->db->get(); return $query->result_array();
修正后生成的正确SQL会是:
SELECT favorites_items.*, items.* FROM favorites_items JOIN items ON favorites_items.id_item = items.id_ad
额外小提示
如果以后遇到需要多次关联同一张表的场景(比如两次关联favorites_items),记得给表起别名来区分身份,举个例子:
$this->db->from('favorites_items as fi1'); $this->db->join('favorites_items as fi2', 'fi1.parent_id = fi2.id');
内容的提问来源于stack exchange,提问作者kadour Hk
相关产品推荐
相关产品推荐

