我正在尝试使用CodeIgniter中的Active Record复制以下查询,但我找不到文档中的位置或搜索在查询中如何使用USING
。
SELECT *
FROM categories C
LEFT OUTER JOIN motorcycle_brands MB
USING ( CatID )
LEFT OUTER JOIN powersport_categories PS
USING ( CatID )
WHERE C.CatID = :uniqueID
这就是我现在所拥有的:
$this->db->select('*');
$this->db->from('categories C');
$this->db->join('motorcycle_brands MB', 'CatID', 'left outer');
$this->db->join('powersport_categories PS', 'CatID', 'left outer');
$this->db->where('C.CatID =', $this->option_id);
$suboptions = $this->db->get();
我尝试过更改
$this->db->join('motorcycle_brands MB', 'USING (CatID)', 'left outer');
$this->db->join('powersport_categories PS', 'USING (CatID)', 'left outer');
答案 0 :(得分:2)
在活动记录类中使用USING没有对JOIN的内置支持。您可以做的最好的是更改“system / database / DB_active_rec.php”此文件中的join()函数。
请参阅此问题以获取完整参考。 codeigniter active records join with using?
答案 1 :(得分:0)
如果多个列共享相同的名称但您不想使用所有这些公共列进行连接,则使用USING
子句。 USING子句中列出的列在语句中不能包含任何限定符,包括WHERE子句:
ON
子句用于连接两个表中列名不匹配的表。连接条件将从WHERE子句中的过滤条件中删除:
所以你的代码应该是,
$this->db->select('*');
$this->db->from('categories C');
$this->db->join('motorcycle_brands MB', 'MB.CatID = C.Id', 'left outer');
$this->db->join('powersport_categories PS', 'C.Id = PS.CatID ', 'left outer');
$this->db->where('C.CatID =', $this->option_id);
$suboptions = $this->db->get();