SQL在考虑隐藏字段/标志的情况下加入2个表

时间:2014-11-13 02:57:30

标签: php sql codeigniter

我的数据库中有2个表,我尝试使用codeignighter加入,表categories_has_productsproducts表,以便我可以获得visible的产品列表

如果visible == 0,那么我不想获得这些产品。

category表与此有点无关,因为我已经知道要收集数据的类别ID,但是我认为我最好包括仅用于参考的设计/表。

我的尝试

我自己尝试过这个但是有点生锈的SQL

$this->db->join('categories_has_products', 'categories_has_products.product_id = products.id', 'left') ->where('visible',1)->get('products');

产品

id | name | visible 
---+------+--------
1  | abc  | 1
2  | def  | 1
3  | ghi  | 0
4  | jkl  | 1
5  | mno  | 1

Categories_has_Products

id | category_id | product_id| 
---+--------+
1  | 1      | 1
2  | 1      | 3
3  | 1      | 4

类别

id | name   | 
---+--------+
1  | fruit  | 
1  | drinks | 

预期结果

id | name | visible 
---+------+---------
1  | abc  | 1
4  | jkl  | 1

1 个答案:

答案 0 :(得分:1)

根据您想要的结果集,您不应该使用LEFT加入。这样的事情应该有效(未经测试,自然而然)

    $this->db->select('products.*');
    $this->db->from('products');
    $this->db->join('categories_has_products', 'categories_has_products.product_id = products.id', 'INNER');
    $this->db->where('products.visible !=', 0);