Hallo ForaumsleserInnen,
also ich habe eine Tabelle mit Namen, wo verschiedene Personen drinstehen:
name
Heike
Igor
Tom
In einer andere Tabelle tragen die Leute einmal täglich ein, wieviel sie
eingenommen haben, für jeden Nutzer und Tag gibt es max. einen Eintrag:
datum name wert
2008-06-29 Heike 5
2008-06-30 Heike 3
2008-07-01 Tom 2
2008-07-03 Igor 10
2008-07-03 Tom 7
2008-07-04 Igor 1
Jetzt will ich ausgeben, wieviel die Nutzer insgesamt eingenommen haben,
dabei soll vorgestern, gestern und heute angezeigt werden. Die Liste der
Tage kann ich mit PHP erzeugen oder mit SQL, falls es sinnvoll ist. Das
Wunschergebnis sieht dann so aus:
name 2008-07-02 2008-07-03 2008-07-04
Heike 8 8 8
Igor 0 10 11
Tom 2 9 9
Die Kopzeile ist nur zum Verständnis, die braucht natürlich nicht mit aus-
gegeben werden. Wie kann ich dieses Ergebnis möglichst effizient mit einer
SQL-Abfrage bekommen?
SELECT name, (SELECT SUM(wert) FROM einnahmen WHERE datum<='2008-07-02' ...), (SELECT SUM(wert) FROM einnahmen WHERE datum<='2008-07-03' ...), (SELECT SUM(wert) FROM einnahmen WHERE datum<='2008-07-04' ...) FROM namen ...
wäre möglich, aber es geht am Ende um eine sehr viele Daten und da will ich
die Vielzahl von Subselects gern vermeiden. Es gibt 200 Namen und insgesamt
11 Tage, die abgefragt werden sollen. Auch gibt es eine Tabelle ausgaben,
die in der gleichen SQL-Abfrage mit abgefragt werden soll (auch zu allen
elf Tagen). Und dann noch einige Infos mehr aus anderen Datenbanktabellen.
Hat jemand für das obige Problem eine Idee?
Viele Grüße,
Stefan