2012-08-11 83 views
2

我有4个表,这一切都在一个关系,是他们彼此相爱:对加入4代表与MySQL和笨

  • 产品
  • 产品分类
  • 产品类别关系
  • 产品图片

我想在一个查询中加入这4个表格,这里是我的Codeigniter代码来完成此操作;

function list_products($limit = 10, $offset = 0, $category) 
{ 
    $this->db->select('p.url, p.name, p.title, i.image'); 
    $this->db->from('products p'); 
    $this->db->join('product_categories c','c.id = r.category_id', 
        'left'); 
    $this->db->join('product_category_relations r', 
        'r.category_id = c.id','left'); 
    $this->db->join('product_images i', 
        'p.id = i.product_id AND i.default = 1','left'); 
    $this->db->where('c.url',$this->category_url.$category); 
    $this->db->limit($limit,$offset); 
    return $this->db->get()->result(); 
} 

当我执行此函数/查询时,结果是有关定义“r”的错误。

未知列在 '关于条款'

查询 'cms_r.category_id':

选择purlpnameptitleiimage FROM (cms_products p)LEFT JOIN cms_product_categories c ON cid = cms_rcategory_id LEFT JOIN cms_product_category_relations r ON rcategory_id = cid LEFT JOIN cms_product_images i ON pid = iproduct_id AND i.default = 1 WHERE curl = '驾驶员学校/ yilbasi' LIMIT 12

你能帮助我吗?

回答

0

您在使用它之后指定rproduct_category_relations类似。

在这里,你写:

$this->db->join('product_categories c','c.id = r.category_id','left'); 

但什么是r?你只在下一个陈述中回答这个问题。

$this->db->join('product_category_relations r','r.category_id = c.id','left'); 

提供样品SQL脚本创建,如果你想具体的答案。

+0

R是product_category_relations 。正如你所看到的,我没有使用“AS”。 – 2012-08-11 14:47:18

+0

@ R.CanserYanbakan但是你使用那个'R'后,你说'R'是'product_category_relations' **。 – 2012-08-11 14:56:21

+0

我知道它应该是什么,我在问怎么回事......那么,我们怎么能做到这一点? :) – 2012-08-11 15:05:12

0

@Edward Ruchevits因为r.category_id的product_category_relations的加盟后,定义查询不加入R,你需要产品product_categories之间的关系然后将查询的东西像

$this->db->join('product_categories c','c.product_id = p.id','left');