#1 18. November 2009 [MySQL] GROUP BY / ORDER BY Hi Leute, ich möchte meinen Autocompleter optimieren. Wenn jemand etwas sucht, dann wird die Suchergebnisanzahl auch protokolliert. Diese möchte ich nun ausgeben. Folgendes Problem entsteht hierbei (statt nem Timestamp verwende ich verständnishalber mal eben Uhrzeiten). Felder: id, suchbegriff, counter, tstamp Eintrag 1: 1, test, 2, 15 Uhr Eintrag 2: 2, test, 5, 16 Uhr Jetzt mache ich meine Query: SELECT suchbegriff, counter FROM suchprotokoll WHERE value = 'test' GROUP BY value So, dann bekomme ich jedoch test, 2. Hab etwas gegoogelt und die Funktion Max gefunden. Wäre ja schön, wenns klappen würde, aber die gibt mir ja nur den höchsten Wert zurück. Es könnte aber sein, dass um 17 Uhr der Counter auf 4 steht, dann krieg ich trotzdem 5 zurück, was nicht gut ist. Weiß da jemand eine Lösung? Ich hab gelesen, dies sei das bekannte ORDER BY vor GROUP BY Problem. Danke schon mal, Hapablap + Multi-Zitat Zitieren
#2 18. November 2009 AW: [MySQL] GROUP BY / ORDER BY In deinem Query soll in der where Klausel bestimmt value == suchbegriff sein? Also Code: SELECT suchbegriff, counter FROM suchprotokoll WHERE suchbegriff = 'test' GROUP BY suchbegriff korrekt? Du gruppierst über "suchgbegriff". Schonmal gut um halt nach den einzelnen Suchbegriffen zu gruppieren. Wenn du MAX auf den counter machst, dann wird er dir pro Suchbegriff halt nur den max. Wert ausgeben. Wenn du den auch pro Stunde willst, dann musst du noch nach Stunde gruppieren. Also sowas wie Code: SELECT suchbegriff, MAX(counter), HOUR(tstamp) FROM suchprotokoll WHERE suchbegriff = 'test' GROUP BY suchbegriff, HOUR(tstamp) Hab grad keine DB zur Hand, deswegen weiß ich nicht obs funktioniert. Aber evtl. ist es ein Denkanstoß + Multi-Zitat Zitieren
#3 18. November 2009 AW: [MySQL] GROUP BY / ORDER BY Inder sieht das völlig korrekt. Wenn du MAX() auf gruppierte Ergebnisse anwendest, bekommt du das Maximum pro Gruppe und nicht das Gesamt-Maximum. D.h. es wird dir zu jedem Suchbegriff die maximale Anzahl an Treffern zurückgegeben. Wie Inder bereits erwähnte, musst du auch nach Uhrzeit gruppieren, falls du diese mit ausgeben möchtest. Bei Gruppen gibt es nur 2 Mögliche Ausgaben: - das (die) Element(e), nach denen gruppiert wird - das (die) Ergebniss(e) von funktionen(Aggregatfunktionen) wie MAX() und MIN() Alle anderen Ausgaben verursachen Probleme aber das geht glaub ich an deiner Frage vorbei ^^ mfg + Multi-Zitat Zitieren