2016-06-13 7 views
0

У меня есть две таблицы: продукты и продукты.Where-clause with left join tables

Когда пользователь нажимает на продукт, я хочу, чтобы это действие хранилось в 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

Использование 'not in' очень опасно рекомендовать без оговорки о недопустимости – Drew