Mysql: Grösstes Ergebniss einer Rechnung auslesen
Marc
- datenbank
Moin,
ich habe folgendes Problem. Ich habe mir einen counter gebastelt, der mit mySQL arbeitet. Jeden Tag wird ein eintrag gemacht (Hits, Tag, Monat, Jahr heissen die Felder). Nun brauche ich für die Ausgabe den besucherstärksten Monat. d.h. irgendwie muss ich den maximalwert von mehreren Summer ermitteln. Also, die Besucherzahlen eines Monats errechne ich per
SELECT sum(hits) WHERE monat = '$anzeigemonat' AND jahr = '$anzeigejahr'
Gibt es eine Möglichkeit irgendwie den besten Monat festzustellen ohne die obrige Abfrage für jeden Monat durchzuführen und dann die Ergebnisse auf Grösse zu vergleichen? Ich hoffe jemand kann mir helfen
grüsse
Marc
Halihallo Marc
SELECT sum(hits) WHERE monat = '$anzeigemonat' AND jahr = '$anzeigejahr'
Gibt es eine Möglichkeit irgendwie den besten Monat festzustellen ohne die obrige Abfrage für jeden Monat durchzuführen und dann die Ergebnisse auf Grösse zu vergleichen? Ich hoffe jemand kann mir helfen
SELECT
sum(hits) AS summe
WHERE
monat='$anzeigemonat' AND
jahr='$anzeigejahr'
ORDER BY summe DESC
LIMIT 0, 1;
also wie du es machst, jedoch nach der Summe der Hits in absteigender Reihenfolge
sortiert; und dann einfach nur den ersten Eintrag auslesen. Dieser muss dann der Logik
zur Folge die grösste Anzahl Hits aufweisen.
Für eine 10-Ten-Monate-Auswertung z. B. einfach 0, 10 beim Limit setzen...
Viele Grüsse
Philipp
Moin,
SELECT
sum(hits) AS summe
WHERE
monat='$anzeigemonat' AND
jahr='$anzeigejahr'
ORDER BY summe DESC
LIMIT 0, 1;
Ich verstehe nur nicht so ganz wie das arbeitet, bzw. kann ich noch nicht so blicken ob das wirklich funktioniert. Erst mal ist da ja keine varaibale Komponente drinne (die where-bedingung ist ja immer die gleich, wenn ich das richtig verstehe liest dieser Befehl also jedes mal die daten vom selben monat aus). Ich kann aber auch nicht so einfach den monat im where weglassen, weil dann ja wohl die jahreshits ausgelesen werden würden. Ich muss also irgendwie bei Summe definieren Zähle alle zusammen bei denen Monat gleich ist. oder sehe ich das falsch?
grüsse
Marc
Halihallo Marc
Ich verstehe nur nicht so ganz wie das arbeitet, bzw. kann ich noch nicht so blicken ob das wirklich funktioniert. Erst mal ist da ja keine varaibale Komponente drinne (die where-bedingung ist ja immer die gleich, wenn ich das richtig verstehe liest dieser Befehl also jedes mal die daten vom selben monat aus). Ich kann aber auch nicht so einfach den monat im where weglassen, weil dann ja wohl die jahreshits ausgelesen werden würden. Ich muss also irgendwie bei Summe definieren Zähle alle zusammen bei denen Monat gleich ist. oder sehe ich das falsch?
ei, ei, ei, du hast recht; da hab ich mir etwas wenig dabei gedacht.
Richtig, du musst die Summen zu jedem Monat bilden. Dies wird über einen GROUP BY über
die Spalte monat erreicht:
SELECT
sum(hits) AS summe
WHERE
jahr='$anzeigejahr'
GROUP BY monat
ORDER BY summe DESC
LIMIT 0, 1;
Ich glaube, dass das das ist, wonach du suchst.
Also, erstmal die Summe zu jedem Monat bilden:
SELECT sum(hits) FROM ... GROUP BY monat [jetzt fällt mir erst auf, du hast
das FROM vergessen!]
dies macht man, indem man nach monat gruppiert (GROUP BY), somit wird der sum dann nur
noch für jeden einzelnen Monat berechnet und nicht mehr über alles. Dann kommt der
ORDER BY, welcher nach den Monats-Summen sortiert (DESC: descending, absteigend), also
die Monate mit der grössten Hits-Anzahl zuerst. Dann der LIMIT, welcher nur noch die
erste Monatssumme zurückgibt.
Viele Grüsse
Philipp