MYSQL Abfrage -> Gruppierung anhand von timestamps

fanste

Erfahrenes Mitglied
Hallo.
Entschuldigt den Titel, aber mir ist grad nix besseres eingefallen.

Mein Problem:
Ich arbeite mit Timestamps. Immer wenn ein neuer Beitrag in meinem Forum geschrieben wird, kommt das in die DB. Eine spalte davon ist post_time mit dem Timestamp drin. Nun brauch ich eine MYSQL Abfrage, mit der ich alle Einträge eines Tages zusammenfassen kann.Danach soll es mir dann den Tag mit den meisten Beiträgen ausgeben (mach ich mit LIMIT und ORDER BY).

Früher hab ich das anhand eines fertigen Datums gemacht. Das geht jetzt allerdings nicht mehr, wegen einer kleinen Änderung im gesammten Code.
Hier mal der Code, wie ich es früher gemacht habe:

PHP:
$sql = "SELECT post_time, COUNT(post_id) FROM posts GROUP BY post_time ORDER BY ZAHL DESC LIMIT 1";

// Auswerten

Wie ändere ich das jetzt am geschicktesten?

Hoffe ihr könnt mir helfen und es war alles verstandlich erklärt.
Danke schonmal im voraus.

mb fanste
 
Probier mal folgende Abfrage:
Code:
SELECT
        `post_time`,
        COUNT(`post_id`) AS `anzahl`
  FROM
        `posts`
  GROUP BY
        TO_DAYS(`post_time`)
  ORDER BY
        `anzahl` DESC
  LIMIT
        1
 
Klappt leider nicht. Das fasst mir alle Timestamps zusammen. Hier sind mal 2 von den 6.
1119255000 => 20.06.2005 ( die anderen sind diesem hier gleich. Unterschied max. +-2000 )
1119000000 => 17.06.2005

Da gibt es mir bei anzahl 6 aus und als TS 1119000000. Das passt aber nicht. Wenn ich das im Kopf mal durchgehe, müsste eigentlich 20.06.2005 rauskommen. :(

Gibt es vll noch eine andere Möglichkeit?

EDIT: Weis nicht, ob es wichtig ist, aber die Spalte mit dem TS ist vom Typ Varchar(15).
 
Zuletzt bearbeitet:
fanste hat gesagt.:
EDIT: Weis nicht, ob es wichtig ist, aber die Spalte mit dem TS ist vom Typ Varchar(15).
Ja das ist sehr wichtig. Wenn man in einer Datenbank ein Datum (und die Zeit) speichert, dann sollte das Feld auch den passenden Datentyp haben. In MySQL ist das DATETIME oder TIMESTAMP. Dann sollte Gumbos Abfrage auch funktionieren.

Gruß hpvw
 
Du musst auch erwähnen, dass es ein Unix-Zeitstempel ist. Das ist natürlich etwas anderes, denn mit einerm Unix-Zeitstempel lässt sich nur ein Zeitpunkt, jedoch kein Zeitraum – was ein Tag natürlich ist – beschrieben.

Wie hpvw es bereits erwähnte, solltest du am besten einen MySQL-eigenen Datums- oder Zeittypen benutzen. Denn MySQL bietet bereits ein paar nützliche Datums- und Zeitfunktionen, mit denen sich solch eine Abfrage realisieren lässt.
 
OK. Das hab ich jetzt verstanden. Jetzt weiß ich aber noch nicht, wie ich das dann genau machen soll. Ich kapier jetzt z.B. noch nicht, in welcher Form (Spaltentyp TIMESTAMP) das Datum abgespeichert wird. Wie speichere ich dann mit PHP etwas in diese Spalte. UNIX-TIMESTAMP kann ich da ja nicht verwenden.

EDIT: Kann gerade erkennen, das das datum in Englischer Form darin steht. Aber wo ist die Uhrzeit? :-(
 
Der TIMESTAMP hat eine besondere Bedeutung. Er kennzeichnet Änderungszeiten am Datensatz. Du solltest ihn also nur verwenden, wenn die Spalte diese Bedeutung hat.
Ansonsten ist DATETIME der passende Typ.
Alles über die Datentypen kannst Du im Handbuch nachlesen.
Ebenfalls interessant sind die Datums- und Zeit-Funktionen. Wenn Du beispielsweise die aktuelle Uhrzeit und das aktuelle Datum eintragen willst, kannst Du die Funktion NOW() verwenden.

Gruß hpvw
 
Das mit dem NOW() kenn ich bereits. Liefert MYSQL auch eine Funktion, mit der man das Englische Datum in ein Deutsches umwandeln kann, oder müsste ich mir da selber etwas schreiben?
 
also wenn du mit dem Tag auch eine Uhrzeit brauchst
kommen datetime oder timestamp in frage

und die ausgabe formatieste mit maysql date_format

um den wert in die DB zu bekommen kannst du auch die Now() Mysql Fuction benutzen
Bei Timestamp brauchste die nicht :-)
 
Zurück