2016-06-13 11 views
0

productsとproducts_actionsの2つのテーブルがあります。Where-clauseテーブルが左結合されている

ユーザーが商品をクリックすると、このアクションをproducts_actionsに保存する必要があります。フィールドhas_removedは1になります。

クリックしていない商品のみをユーザーに提示したいと思います。ユーザーが製品を削除していない場合

id: 1 
id_product: 2 
has_removed: 1 

表 "製品":

id: 1 
name: Product 1 

id: 2 
name: Product 2 

id: 3 
name: Product 3 

表 "products_actions"

は現在、私は私のテーブルに次のエントリを持っていますこれまでの彼のページからは、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

「not in」を使用すると、null可能性についての警告がなくてもお勧めできます – Drew

関連する問題