Franco: mysql Addieren von 2 Ergebnissmengen möglich?

Beitrag lesen

<seufz>

<auchseufz>

Ich zitiere aus dem Handbuch:

To apply ORDER BY or LIMIT  to an individual SELECT,
    place the clause inside the parentheses that enclose the SELECT:
</seufz>

Was immer das genau heißen mag, ich vermute, ich darf ausschließlich gruppieren, aber nicht limitieren.

War ehrlich gesagt, mein letzter Versuch vor der Kapitulation. Ich hätte mir dann alle Werte in arrays eingelesen und manuell addiert, aber siehe da, folgendes funktioniert tatsächlich:

  
SELECT  
gesamt.ym,  
SUM(gesamt.zeit)  
FROM (  
SELECT FROM_UNIXTIME(JoggingTimestamp, '%Y%|%m') AS ym, SUM(JoggingZeit) AS zeit  
FROM Jogging  
WHERE UserId ='1'  
GROUP BY ym  
  
UNION ALL  
  
SELECT FROM_UNIXTIME(KinoTimestamp, '%Y%|%m') AS ym, SUM(KinoZeit) AS zeit  
FROM Kino  
WHERE UserID='1'  
GROUP BY ym  
  
) gesamt  
GROUP BY gesamt.ym DESC LIMIT 12  

Nächster Punkt: LIMIT ist hier meiner Meinung nach der falsche Weg. Du möchtest die Daten der letzten 12 Monate. Was ist, wenn Du in einem Monat nicht im Kino warst oder nicht joggen konntest? Deine Abfrage versagt.

Das allerdings ist korrekt!
Ich hätte nämlich dann tatsächlich gerne eine 0 für diesen Monat.

Du solltest den Zeitraum mit einer WHERE-Klausel einschränken, so dass Du auf die 12 gewünschten Monate kommst.

1 Frage: Wie denn? Über where timestamp between...?
2 Frage: Ist das nicht sehr belastend für die db, wenn ich gar kein Limit setze? Weil Limit bedeuted doch, die db hört zu arbeiten auf, wenn sie die 12 fertig hat. Where bedeutet, dass sie immer alle Daten durchforsten muss, selbst wenn klar ist, dass sie keine weiteren Ergebnisse mehr finden kann. Oder?

Grüße und übrigens danke für Deine Hilfe

Franco