undso: Query und count()

Beitrag lesen

Hallo,

Doch, du musst es nur richtigrum anpacken.

Oh, habs evtl. verwechselt. Gerade habe ich mehrere Möglichkeiten durchprobiert, vertauscht, RIGHT, LEFT usw.
Das ganze funktioniert, wenn ein Eintrag in flirttabelle vorhanden ist, ansonsten gibts keine Datensätze.

Usertabelle:
UseriID Name Wohnort
1 Peter Berlin
2 Udo  Stuttgart
3 Ida  Frankfurt
4 Robert Mainz
5 Paul Hamburg
[...]
Flirttabelle:
UserID FlirtID
1  3
2  3
3  4

Soweit klar.

Nun will ich mit der Query oberprüfen, ob in der Flirttabelle ein Treffer gelanden wird. Falls "nicht", dann soll er der Userid jedoch den Usernamen ausprucken, sprich:

Du willst also wissen, welche User wieviele Flirtkontakte haben?

select count(A.userid), B.username from jf_flirttabelle AS A LEFT OUTER JOIN jf_usertabelle AS B ON A.userid=B.userid where userid=1 and friendid=3 GROUP BY userid, username ;

Der LEFT JOIN bringt dir alle Ergebnisse der linken - also der Flirttabelle - kombiniert mit den Ergebnissen der Usertabelle. Du willst doch aber alle User haben, auch wenn sie noch keinen Kontakt haben, oder? Dann müsste das so funktionieren:

SELECT

usertabelle.userid
  name,
  COUNT(flirttabelle.FlirtID) AS Kontakte
FROM
  usertabelle
LEFT JOIN
  flirttabelle
ON
  usertabelle.userid = flirttabelle.userid
GROUP BY
  usertabelle.userid


>   
> Das ergibt für alle User aus der Usertabelle die Anzahl der Einträge in der Flirttabelle, also mit wievielen anderen Usern derjenige momentan verbandelt ist. Sind keine Einträge vorhanden, gibt's 0. Wenn's das auch nicht ist, verstehe ich ehrlich gesagt nicht, was du da genau abfragen willst.  
  
Mein Problem liegt glaube ich an dem Where Teil, da ich nicht alle User von Usertabelle ausgeben will und die dazugehörigen Einträge in Flirttabelle ermitteln, sondern, genau speziell prüfen, ob der Eintrag "where userid=1 and flirtid=3" in flirttabelle vorhanden ist oder nicht. Das soll mir dann eine 0 oder eine 1 zurückgeben, mit dem usernamen von flirtid=1  
  
  
Habs jetzt umgedreht:  
  
~~~sql
  
select count(B.userid), A.username from usertabelle AS A LEFT OUTER JOIN flirttabelle AS B ON A.userid=B.userid where userid=1 and flirtid=3 GROUP BY userid, username ;

die Query gibt korrekt dann aus:

count(a.userid) username
1    Ida

Wenn ich flirtid=5 mache. Kommt nichts raus, weil es die Zeile ( userid=1 und flirtid=5)ja in der flirttabelle nicht gibt.
Ich brauche aber dennoch einen Datensatz, dann eben mit einer 0 (dass es die Zeile nicht gibt und der usernamen (5=Paul))

count(a.userid) username
0    Paul

Hoffentlich nerve ich euch jetzt nicht. Stehe gerade nur auf dem Schlauch, da das LEFT Join nun umgedreht habe und dennoch kein Datensatz rauskriege.

Grüße