MySQL-Abfrage grafisch darstellen
HaeS
- datenbank
0 King Lully0 Ilja0 King Lully0 Ilja0 King Lully0 ilja
0 HaeS
Hallo,
ich habe eine mysql-Tabelle "seitenaufrufe" mit folgendem Aufbau:
+--------+---------+
| aufruf | datum |
+--------+---------+
| 1 | 070119 |
+--------+---------+
| 1 | 070120 |
+--------+---------+
| 1 | 070120 |
+--------+---------+
Für jeden Seitenaufruf wird ein Datensatz mit dem Datum des Aufrufs eingefügt.
Jetzt will ich zum Ende des Monats die Statistik mit php ausgewertet nach Tagen darstellen. Eine Möglichkeit die mir einfällt wäre eine Abfrage für jeden Tag im Monat.
select aufruf, count(*) as anzahl from seitenaufrufe where ((datum>070100)AND(datum<070102));
"
"
30 Abfragen
"
"
select aufruf, count(*) as anzahl from seitenaufrufe where ((datum>070130)AND(datum<070131));
Von der Performance ganz zu schweigen könnte ich mir vorstellen, dass es für dieses Problem eine etwas elegantere Lösung geben könnte.
Hat mir jemand einen Tip?
Hat mir jemand einen Tip?
Du gruppierst mit GROUP BY und unter Einsatz der Datumsfunktionen (könnte DATEPART() heissen das Ding mit dem Du den Tag extrahierst und den Du in die GROUP BY-Klausel aufnimmst).
yo,
Du gruppierst mit GROUP BY und unter Einsatz der Datumsfunktionen (könnte DATEPART() heissen das Ding mit dem Du den Tag extrahierst und den Du in die GROUP BY-Klausel aufnimmst).
das wäre fatal, da somit nur tage gruppiert werden und nicht die monate und jahre, die aber auch eine rolle spielen. mit anderen worten ein GROUP BY über das gesamte datum ist besser, solange nicht die zeit darin enthalten ist.
SELECT datum, COUNT(*) AS Anzahl
FROM tabelle
GROUP BY datum
falls in der aufruf spalte andere werte als nur 1 stehen,. könnte man NOCH SUM(aufruf) anstelle von COUNT(*) nehmen, wobei die spalte recht überflüssig ist, wenn sowieso immer nur der wert 1 drinne steht.
Ilja
Du gruppierst mit GROUP BY und unter Einsatz der Datumsfunktionen (könnte DATEPART() heissen das Ding mit dem Du den Tag extrahierst und den Du in die GROUP BY-Klausel aufnimmst).
das wäre fatal, da somit nur tage gruppiert werden und nicht die monate und jahre, die aber auch eine rolle spielen. mit anderen worten ein GROUP BY über das gesamte datum ist besser, solange nicht die zeit darin enthalten ist.
Gemeint war sowas:
select
datepart(day,df_1),
datepart(month,df_1),
datepart(year,df_1),
count(*)
from
dt_1
group by
datepart(day,df_1),
datepart(month,df_1),
datepart(year,df_1)
Allerdings liegt df_1 gar nicht als Zeitstempel vor, sondern als String. Dann braucht man die Datumsfunktionen gar nicht.
yo,
group by
datepart(day,df_1),
datepart(month,df_1),
datepart(year,df_1)
warum das datum erst auseinander pflücken und dann wieder "logisch" durch den group by zusammen setzen, dann gruppiere doch gleich über das datum.
Ilja
group by
datepart(day,df_1),
datepart(month,df_1),
datepart(year,df_1)warum das datum erst auseinander pflücken und dann wieder "logisch" durch den group by zusammen setzen, dann gruppiere doch gleich über das datum.
Weisst Du, für mich ist ein Zeitstempel meist so ein datetime, der per getdate() bis zur Tausendstel Sekunde genau gefüllt ist. Den genutzten Zeitstempel kenne ich eher aus alten COBOL-Zeiten (sechsstellig ;). Und beim "echten" Zeitstempel muss man - fatalerweise LOL - auseinanderhacken.
yo,
Und beim "echten" Zeitstempel muss man - fatalerweise LOL - auseinanderhacken.
gut aber warum dann nicht gleich eine funktion, die mir die uhrzeit aus dem datum rausnimmt und ich dann nur noch den datumswert habe ?
Ilja
Und beim "echten" Zeitstempel muss man - fatalerweise LOL - auseinanderhacken.
gut aber warum dann nicht gleich eine funktion, die mir die uhrzeit aus dem datum rausnimmt und ich dann nur noch den datumswert habe ?
Du meinst eine selbstgebaute Funktion, die die drei DATEPART()s kapselt? Tja, warum nich? Oder gibts eine andere passendere Datumsfunktion?
Danke für die Antworten. Werde mir die "group by"-Funktion mal genauer ansehen.