Codeigniter:连接多个表

时间:2016-03-10 16:16:58

标签: php mysql codeigniter

我有3个包含以下列的表

ITEMS
-id
-name
-category_id
-brand_id

ITEM_BRAND
-id
-name

ITEM_CATEGORY
-id
-name

我加入了

$this->db->order_by('items.name', 'ASC');
    $this->db->join('item_brand', 'item_brand.id = items.brand_id');
    $this->db->join('item_category', 'item_category.id = items.category_id');
    $query = $this->db->get("items");

问题:

由于选择了所有列,是否可以从定义表中选择一列(例如item_brand.name)?

我做了以下代码,但结果为零。 但如果我删除以下这一行,

$this->db->join('item_category', 'item_category.id = items.category_id');

并将$data['name']加载到视图中,我得到的只是brand.name

我需要加入3个表格。但我没有这样做。

编辑: 我设法为列提供了一个解决方案,但是,加入3个表我的结果为零。

$this->db->select('items.name, 
        items.category_id, 
        items.srp, 
        items.dp, 
        items.brand_id, 
        items.id, 
        items.serial, 
        item_brand.name AS item_brand, 
        item_category.name AS item_category');
    $this->db->order_by('items.name', 'ASC');        
    $this->db->join('item_category', 'item_category.id = items.category_id');
    $this->db->join('item_brand', 'item_brand.id = items.brand_id');
    $query = $this->db->get("items");

1 个答案:

答案 0 :(得分:1)

  

是否可以从定表中选择一列(例如   item_brand.name)?

是的,您可以使用select从明确表中选择列,如下所示:

 $this->db->select('item_brand.name');
 $this->from('items');
 $this->db->join('item_brand', 'item_brand.id = ems.brand_id');
 $this->db->join('item_category', 'item_category.id = items.category_id');
  $query = $this->db->get("items");

如果你在加入item_category表时没有得到结果,即

$this->db->join('item_category', 'item_category.id = items.category_id');

然后必须存在外键问题,即join使用mysql的inner join,它接受​​连接表之间的所有交叉(公共)数据,并且必须没有匹配的iditem_categoryitems表中的外键)。因此,您可以使用rightjoin来获取数据。如果item_category表中存在任何匹配的外键(items_category.id),则会从items表和来自items表的所有数据中获取所有数据。 所以,你能做的是:

 $this->db->select('item_brand.name');
 $this->from('items');
 $this->db->join('item_brand', 'item_brand.id = ems.brand_id');
 $this->db->join('item_category', 'item_category.id = items.category_id','right');
  $query = $this->db->get("items");

如果您想了解更多内容,可以访问this doc。

希望它有所帮助。快乐的编码:)。