Ich versuche eine Rangliste basierend auf den Punkten (Geld) zu erstellen, die ein Benutzer hat. Die Punkte werden in mehreren Tabellen gespeichert und einige Benutzer haben möglicherweise keine Punkte in einer bestimmten Tabelle.MySQL Wie bekomme ich die Summe mehrerer Zeilen aus mehreren Tabellen und ordne die Ergebnisse dann nach Gesamt absteigend?
Table: account
--------------------------
| uid | name | locker |
|-----|---------|--------|
| 1 | Bob | 15 |
| 2 | Dave | 2 |
| 3 | Jim | 5 |
--------------------------
Table: container
------------------------
| account_uid | money |
|-------------|--------|
| 1 | 4 |
| 3 | 1 |
| 3 | 2 |
| 3 | 4 |
------------------------
Table: vehicle
------------------------
| account_uid | money |
|-------------|--------|
| 2 | 2 |
| 2 | 1 |
| 3 | 2 |
------------------------
Ich möchte die Ergebnisse ouput wie sehen -
Bob 19
Jim 14
Dave 5
Beachten Sie, dass einige Tabellen haben keine Punkte für einige Menschen.
Dieser Code hat nicht für mich funktioniert. Es scheint die Punkte irgendwie dupliziert zu haben.
SELECT
act.name,
act.uid,
SUM(COALESCE(act.locker,0) + COALESCE(con.money,0) + COALESCE(veh.money,0)) AS total
FROM account as act
LEFT JOIN container as con
ON act.uid = con.account_uid
LEFT JOIN vehicle as veh
ON act.uid = veh.account_uid
Group By act.name
ORDER BY total DESC
Ich würde nur doppelte Punkte erwarten, wenn ein Benutzer entweder zwei Container oder Fahrzeuge oder allgemeinen (Summe der Punkte) X (passende Zeilen in Containern) X (passende Zeilen in Fahrzeug) –
Leider hat! Ich habe die Tabellen aktualisiert, um das zu berücksichtigen. Ich habe vergessen, das im ersten Post hinzuzufügen. – Damien