2016-06-13 13 views
0

Ich habe zwei Tabellen: Produkte und Produkte_Aktionen.Where-Klausel mit links verbundenen Tabellen

Wenn der Benutzer ein Produkt wegklickt, möchte ich, dass diese Aktion in products_actions gespeichert wird. Das Feld has_removed wird dann 1 sein.

Ich möchte dem Benutzer nur die Produkte präsentieren, die er nicht angeklickt hat.

Zur Zeit habe ich folgende Einträge in meinen Tabellen:

Tabelle "Produkte":

id: 1 
name: Product 1 

id: 2 
name: Product 2 

id: 3 
name: Product 3 

Table "products_actions":

id: 1 
id_product: 2 
has_removed: 1 

Wenn der Benutzer ein Produkt nicht entfernt Von seiner bisherigen Seite gibt es keinen entsprechenden Eintrag in der Tabelle products_actions.

Also meine Frage ist:

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

Wie erreiche ich, dass meine Abfrage aboves „Produkt 1“ und „Artikel 3“ als Einträge liefert?

Antwort

2

Ich bin nicht ganz klar, was Sie brauchen. Ich denke du sprichst wahrscheinlich so:

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

Verwendung von 'nicht in' ist sehr gefährlich, ohne eine Einschränkung Aussage über Null-Fähigkeit zu empfehlen – Drew

Verwandte Themen