CodeIgniter Active Record在查询中使用“USING”

时间:2014-03-04 04:16:42

标签: php mysql codeigniter

我正在尝试使用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');

2 个答案:

答案 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();