goto;
Erfahrenes Mitglied
Hallo zusammen,
ich möchte aus einer MySQL-Tabelle den Mittelwert einer Spalte berechnen. Dies soll jeweil für einen Monat, jedoch maximal 12 Monate in die Vergangenheit passieren.
SQL-Tabelle (vereinfacht):
vID # vTime (Timestamp) # vGrade (hier Mittelwert)
Ich habe 3 verschiedene Ansätze für diese Lösung, bin mir bei der Sinnhaftigkeit aber noch nicht ganz sicher.
Was soll passieren:
Es soll aus der MySQL-Tabellenspalte "vGrade" ein Mittelwert gebildet werden. Der Mittelwert soll direkt im SQL-Query berechnet werden.
Gegeben:
- pro Monat handelt es sich um ca. 5000 bis 8000 Datensätze.
Ansatz Nr.1
- Ich berechne zunächst den aktuellen Monat und werfe diesen in eine for-Schleife, die bei jedem Tick einen Monat abzieht.
- Bei jedem Durchgang wird der berechnete Monatsbeginn und Monatsende in ein SQL-Query gelegt und dort mit "vTime BETWEEN :start AND :end" die betroffenen Datensätze geliefert.
- Ich speichere die results in einem Array zur weiteren Verarbeitung.
- Mein Contra: Ich baue dadurch 12 Datenbankverbindungen auf.
Ansatz Nr.2
- Ich berechne den aktuellen Monat und ziehe von diesem 12 Monate ab.
- Mit diesem Timestamp hole ich alle betroffenen Datensätze aus der Datenbank.
- via foreach durchlaufe ich das gelieferte SQL-Object und prüfe bei jedem Schleifendurchgang, um welchen Monat es sich bei dem Datensatz handelt und weise diesem einem Monatsbasierten Array zu.
- Dieses Array steht dann zur weiteren Bearbeitung bereit.
- Mein Contra: Im besten Fall handelt es sich um ca. 60.000 treffer, bei dem jeder Datensatz eine Timestamp-Validierung durchlaufen muss.
Ansatz Nr.3
- Ich berechne alle notwendigen Timestamps (von / bis) und werfe diese direkt in ein SQL-Query.
Ich tendiere derzeit zu Ansatz Nr.3, möchte aber gern Eure Meinung hören.
Liebe Grüße
ich möchte aus einer MySQL-Tabelle den Mittelwert einer Spalte berechnen. Dies soll jeweil für einen Monat, jedoch maximal 12 Monate in die Vergangenheit passieren.
SQL-Tabelle (vereinfacht):
vID # vTime (Timestamp) # vGrade (hier Mittelwert)
Ich habe 3 verschiedene Ansätze für diese Lösung, bin mir bei der Sinnhaftigkeit aber noch nicht ganz sicher.
Was soll passieren:
Es soll aus der MySQL-Tabellenspalte "vGrade" ein Mittelwert gebildet werden. Der Mittelwert soll direkt im SQL-Query berechnet werden.
Gegeben:
- pro Monat handelt es sich um ca. 5000 bis 8000 Datensätze.
Ansatz Nr.1
- Ich berechne zunächst den aktuellen Monat und werfe diesen in eine for-Schleife, die bei jedem Tick einen Monat abzieht.
- Bei jedem Durchgang wird der berechnete Monatsbeginn und Monatsende in ein SQL-Query gelegt und dort mit "vTime BETWEEN :start AND :end" die betroffenen Datensätze geliefert.
- Ich speichere die results in einem Array zur weiteren Verarbeitung.
- Mein Contra: Ich baue dadurch 12 Datenbankverbindungen auf.
Ansatz Nr.2
- Ich berechne den aktuellen Monat und ziehe von diesem 12 Monate ab.
- Mit diesem Timestamp hole ich alle betroffenen Datensätze aus der Datenbank.
- via foreach durchlaufe ich das gelieferte SQL-Object und prüfe bei jedem Schleifendurchgang, um welchen Monat es sich bei dem Datensatz handelt und weise diesem einem Monatsbasierten Array zu.
- Dieses Array steht dann zur weiteren Bearbeitung bereit.
- Mein Contra: Im besten Fall handelt es sich um ca. 60.000 treffer, bei dem jeder Datensatz eine Timestamp-Validierung durchlaufen muss.
Ansatz Nr.3
- Ich berechne alle notwendigen Timestamps (von / bis) und werfe diese direkt in ein SQL-Query.
Ich tendiere derzeit zu Ansatz Nr.3, möchte aber gern Eure Meinung hören.
Liebe Grüße