2016-06-13 110 views
0

我有两个表:products和products_actions。带左连接表的Where子句

当用户点击某个产品时,我希望将此操作存储在products_actions中。字段has_removed将为1。

我想仅向用户展示他没有点击过的那些产品。

目前我已经在我的表如下条目:

表 “产品”:

id: 1 
name: Product 1 

id: 2 
name: Product 2 

id: 3 
name: Product 3 

表 “products_actions”:

id: 1 
id_product: 2 
has_removed: 1 

如果用户不删除产品从他的页面到目前为止,products_actions表中没有相应的条目。

所以我的查询是:

$qb->select('p') 
      ->leftJoin(
       'ProductsActions', 
       'pa', 
       'WITH', 
       'pa.idProduct = p.id' 
      ) 
      ->where('pa.hasRemoved != 1'); 

如何做到这一点我的查询aboves提供“产品1”和“产品3”项?

回答

2

我不完全清楚你需要什么。我猜你可能是这样说的:

select * from products where id not in (select id_product from products_actions where hasRemoved = 1) 
+0

使用'不在'是非常危险的建议没有关于可空性的警告声明 – Drew