Abfrage über 3 Tabellen und Summierung
Hallo!
Ich habe 3 Tabellen, die relevanten Spalten sind:
tabuser:
- nickname
tabtipps:
- nickname
- punkte
tabzwtipps:
- nickname
- punkte
nickname ist durchgängig quasi die ID, punkte sind TINYINT.
Jeder User kann(muss nicht) in beiden Tabellen vorkommen, auch öfters da hier diverse Spiele getippt werden... Punkte kann aber auch NULL sein!
Ich muss es jetzt irgendwie hinbekommen ein Gesamtranking zu erstellen, also vom Prinzip her:
Gesamtsumme aller Punkte je User
(die Sortierung bring ich noch hin..)
Ich habe mal so angefangen, aber komme jetzt irgendwie nicht mehr weiter...
SELECT *, (t.Punkte+z.Punkte) AS Gesamt
FROM tabuser u
LEFT JOIN tabtipps t
ON u.Nickname = t.Nickname
LEFT JOIN tabzwtipps z
ON u.Nickname = z.Nickname
Hat jemand einen Tipp für mich, ich muss ansonsten 3x abfragen und mit PHP und Arrays mir das Ganze zusammensammeln ..
Danke!
//---EDIT -----
Ich hab eben eine Variante noch gefunden, die liefert mir - bis auf den ersten korrekte Werte
SELECT u.Nickname, SUM( coalesce(t.Punkte, 0) + coalesce(z.Punkte,0) ) AS UserSumme
FROM tabuser u
LEFT JOIN tabtipps t
ON u.Nickname = t.Nickname
LEFT JOIN tabzwtipps z
ON u.Nickname = z.Nickname
GROUP BY u.Nickname
ORDER BY UserSumme DESC, Nickname ASCBringt dann raus:
Nickname UserSumme
Hiasi 178
Franzi 13
Hans 8
Karli 7
Seppi 5
admin 0
Der erste Wert müsste eigentlich 30 sein, die anderen stimmen...
Geht es so auch irgendwie oder doch ifnull ??
//EDIT 2-------------
So funktioniert es...
SELECT u.Nickname, IFNULL(t.Punkte, 0) + IFNULL(z.Punkte, 0) UserSumme
FROM tabuser u
LEFT JOIN (
SELECT Nickname, SUM(Punkte) Punkte
FROM tabtipps
GROUP BY Nickname
) t
ON u.Nickname = t.Nickname
LEFT JOIN (
SELECT Nickname, SUM(Punkte) Punkte
FROM tabzwtipps
GROUP BY Nickname
) z
ON u.Nickname = z.Nickname
GROUP BY u.Nickname
ORDER BY UserSumme DESC, Nickname ASC
Juergen
Edited 4 time(s). Last edit at 08/24/2010 11:11PM by Juergen Hausler.