MySQL Right join mit Where

Split1989

hh-student.de
ID: 238425
L
9 April 2007
1.223
85
moin leute ... brauche mal wieder eure hilfe bei einer mysql abfrage

folgende Tabellen sind vorhaben "ist nur ein bsp"

user
BEN_ID|NAME|VORNAME
1000|Frank|Sergej
1001|Mustermann|Max
1002|Smith|JOHN


bewertung
ID|BEN_ID|BEWERTUNG
1|1000|0
2|1001|5
3|1000|0
4|1000|3
5|1001|0

jetzt möchte ich gerne sowas ausgegeben bekommen


augabe
ID|NAME|VORNAME|BEWERTUNGEN_MIT_NULL
1000|Frank|Sergej|2
1001|Mustermann|Max|1
1002|Smith|John|0

was ich mir gedacht habe wäre

PHP:
SELECT user.*, count(bew.ID) as BEWERTUNGEN_MIT_NULL  FROM user
right join bewertung as bew on bew.BEN_ID = user.BEN_ID
WHERE bew.BEWERTUNG = 0
group by user.BEN_ID

leider werden hierbei die User die noch keine Bewertung mit 0 haben nicht ausgegeben
 
left join statt right join.

bei usern ohne bewertung kommt allerdings nicht die anzahl 0 sondern NULL.
Ggf. also noch ein if einbauen

Code:
IFNULL(count(bew.ID),0)
 
danke hat super geklappt ... weist du evtl auch wie ich das hinbekomme das ich ich die bewertungen mit über 0 zähle und ausgebe?? muss das in einen extra select ?
 
Versuch doch mal:
Code:
SELECT user.BEN_ID, user.NAME, user.VORNAME,
SUM( CASE WHEN Bewertung = 0 THEN 1 ELSE 0 END) as Anzahl_Bewertungen_EQ_0 ,
SUM( CASE WHEN Bewertung > 0 THEN 1 ELSE 0 END) as Anzahl_Bewertungen_GT_0

FROM user LEFT JOIN bewertung    
on bewertung.BEN_ID = user.BEN_ID

GROUP BY 
user.BEN_ID, user.NAME, user.VORNAME
 
Versuch doch mal:
Die SUM's kann man auch vereinfacht darstellen:

PHP:
SUM(bewertung.BEWERTUNG = 0) as Anzahl_Bewertungen_EQ_0

Das geht, weil MySQL die Ausdrücke schon automatisch zu 0 oder 1 auswertet.

Eine alternative Möglichkeit, wenn du nur die 0er Bewrtungen haben möchtest, ist folgende:

PHP:
SELECT user.BEN_ID, user.NAME, user.VORNAME,
IFNULL(SUM(bewertung.ID), 0) as BEWERTUNGEN_MIT_NULL

FROM user
LEFT JOIN bewertung ON bewertung.BEN_ID = user.BEN_ID AND bewertung.BEWERTUNG=0

GROUP BY user.BEN_ID, user.NAME, user.VORNAME