2016-06-10 8 views
1

ich eine Tabellenstruktur haben wie folgt vor:bekommen eine entsprechende und nicht entsprechenden Werte von vielen zu vielen Tabelle

Marken => Historien < = Benutzer

Histories viele zu viele Tabelle und enthält die folgenden Werte:

Ich brauche alle Marken mit Punkten, für die USER SCORED Punkte, und ALLE Marken, für die Benutzer keinen entsprechenden Wert haben. Es würde wie folgt aussehen:

brandId => 1 (has corresponding value) => 5 points 
brandId => 2 (no corresponding value) => null (column points is null) 

und so weiter ...

Kann mir jemand helfen mit diesem aus ??

Edit:

Hallo Gordon, ich habe geändert Ihre Abfrage wie folgt aussehen:

select b.*, sum(h.points) as points 
from brands b left join 
    histories h 
    on b.id = h.brandId 
    and h.userId = 2866 and h.brandId = 2 
group by h.brandId 

I zweite Bedingung h.brandID = 2 // oder einen anderen Wert haben müssen, damit es gibt nur 1 Datensatz zu einem Zeitpunkt zurück, wenn es keinen Datensatz gibt, möchte ich, dass die Spalten Punkte null sind, wenn es nicht ist, sollte es alle Punkte summieren n zeigen sie in der Spalte ...

Antwort

0

I Ich denke, Sie wollen nur eine left join und group by:

select b.brandId, sum(h.points) 
from brands b left join 
    histories h 
    on b.brandid = h.brandid and h.userId = $userId 
group by b.brandId; 

Wenn es keine Zeilen in histories für den Benutzer sind, dann wird der Wert NULL sein.

EDIT:

Wenn Sie left join verwenden, dann die group by auf einer Säule aus der ersten Tabelle sein soll:

select b.*, sum(h.points) as points 
from brands b left join 
    histories h 
    on b.id = h.brandId and 
     h.userId = 2866 and h.brandId = 2 
group by b.brandId; 
Verwandte Themen