Wie sortiere ich aufgrund des timestamps?
Phil
- php
Hi ihrs!
Ich hätte gern mal eine Frage:
Wie kann ich meine Daten in einer Tabelle derartig auslesen, dass ich sie mit Hilfe des timestamps sortieren kann?
Ich stell mir das so vor, dass ich zuerst nach Monaten bzw. Jahr vorsortiere und dann per Linkklick einen Monat auswähle. Daraufhin werden mir alle Einträge in der DB aus diesem Monat angezeigt.
WAS ich benutzen muss, ist mir klar: Ein paar Schleifen und die date-Funktion, aber ich weiß nicht, wie ich diese Zeiträume abstechen soll. Ich kann doch nicht für jeden Eintrag in der DB erstmal mit date() das Jahr und den Monat rausfriemeln und dann mit einer if-Abfrage entscheiden, obs angezeigt werden soll oder nicht...
Sitze da schon ne Weile dran und habe ich null Ahnung, wisst ihr was?
Wenn ja, sagt es mir bitte :)
Hallo Phil,
WAS ich benutzen muss, ist mir klar: Ein paar Schleifen und die date-Funktion, aber ich weiß nicht, wie ich diese Zeiträume abstechen soll. Ich kann doch nicht für jeden Eintrag in der DB erstmal mit date() das Jahr und den Monat rausfriemeln und dann mit einer if-Abfrage entscheiden, obs angezeigt werden soll oder nicht...
Berechne den Timestamp des höchstmöglichen und des niedrigstmöglichen Datums und schränke die Abfrage an die Datenbank so ein, dass nur Timestamps, die größer als der niedrigstmögliche und kleiner als der höchstmögliche sind, ausgegeben werden. Diese kannst Du dann auch noch sortieren.
Grüße,
Christian
Hi!
Hmm, also ich versteh, was du meinst, aber wie soll ich das wiederum machen?
Muss ich nun in das Script die timestamps der letzten paar Monate und der folgenden Jahre einarbeiten?
Ich komm mir zwar bei der Frage etwas total strunzdoff vor, aber ich weiß echt nicht, wie ich es realisieren sollte...
Hallo Phil,
Hmm, also ich versteh, was du meinst, aber wie soll ich das wiederum machen?
Wo ist das Problem? Du bekommst ja, wenn Du die DB-Abfrage machen sollst, das Jahr und den Monat übergeben. Du kannst das Jahr, den Monat, den Tag 1 und die Uhrzeit 00:00:00 für den Anfangstimestamp verwenden, den Jahr, den Monat+1, den Tag 1 und die Uhrzeit 00:00:00 für den Endtimestamp. Oder bist Du vielleicht auf der Suche nach mktime?
Grüße,
Christian
Hallo Phil,
benutzt Du denn eine Datenbank? Ich schau mal in meine Glaskugel und vermute MySQL?
Grundsätzlich: Ein timestamp-Feld wird von der Datenbank automatsich geführt und
kennzeichnet den letzten Schreibzugriff auf den Datensatz. Wenn Du aber sicherstellen willst zu kennzeichnen, wann ein Datansatz ursprünlich angelegt wurde, solltest Du ein Feld vom Typ "datetime" mit default "now()" nehmen. Diese Felder liefern dann einen Rückgabewert in der Form:
2002-12-22 19:01:33
Diesen Rückgabewert kann man sowohl filtern (where ...) als auch sortieren (order by) und gruppieren. Außerdem kann man auf sie die Funktionen min() und max() anwenden, was in Verbindung mit "where" und "group by" leicht für die Ermittlung von unterer und oberer Schranke genutzt werden kann.
Solltest Du noch Fragen haben, dann gib uns einfach etwas mehr Info, was Dein Ziel ist, was die Voraussetzungen sind, was Du schon versucht hast, und was dabei herasusgekommen ist. Du kennt doch das Prozedere bereits.
Liebe Grüße aus http://www.braunschweig.de
Tom
Moin!
Wo ist das Problem? Du bekommst ja, wenn Du die DB-Abfrage machen sollst, das Jahr und den Monat übergeben. Du kannst das Jahr, den Monat, den Tag 1 und die Uhrzeit 00:00:00 für den Anfangstimestamp verwenden, den Jahr, den Monat+1, den Tag 1 und die Uhrzeit 00:00:00 für den Endtimestamp. Oder bist Du vielleicht auf der Suche nach mktime?
SELECT spalten FROM tabelle WHERE timestampspalte BETWEEN anfang AND ende
Jetzt muß nur noch für anfang und ende das passende Zeitrepräsentationsformat gefunden werden, und schon sollte alles funktionieren. Wahlweise kann man dazu MySQL-Funktionen nehmen, die entweder die timestampspalte passend umwandeln, oder anfang und ende, oder man nimmt PHP-Funktionen, die anfang und ende passend wandeln.
Sortiert wird dann mit ORDER BY timestampspalte.
- Sven Rautenberg