Du bist nicht angemeldet (anmelden)
Seite 1
Monate mit PHP auslesen
Hallo Freunde der fröhlichen Webprogrammierung
Ich erfasse in einer MySQL Datenbank Timestamps (time()) von Einkäufen. Nun müsste ich jeden Monat eine „Monatsabrechnung“ erstellen.
Hat hier irgendjemand eine gute Idee, wie ich möglichst dynamisch (jeden 1.1 eines Monats der nächsten 15 Jahre hardcoden kann ja keine Lösung sein) zu einer Lösung komme?
Das Ziel sollte ein SQL query sein, der mir nur die x Resultate in der Periode des gewünschten Monates ausgibt. Und, wie gesagt, ich möchte das möglichst clever lösen können.
Kann man irgendwie den Timestamp vom 1.1.0x um 00:00 Uhr berechnen lassen?
Bin für jede Hilfe dankbar
Edit:
Datum berechnen geht mit http://ch.php.net/mktime
Ich erfasse in einer MySQL Datenbank Timestamps (time()) von Einkäufen. Nun müsste ich jeden Monat eine „Monatsabrechnung“ erstellen.
Hat hier irgendjemand eine gute Idee, wie ich möglichst dynamisch (jeden 1.1 eines Monats der nächsten 15 Jahre hardcoden kann ja keine Lösung sein) zu einer Lösung komme?
Das Ziel sollte ein SQL query sein, der mir nur die x Resultate in der Periode des gewünschten Monates ausgibt. Und, wie gesagt, ich möchte das möglichst clever lösen können.
Kann man irgendwie den Timestamp vom 1.1.0x um 00:00 Uhr berechnen lassen?
Bin für jede Hilfe dankbar
Edit:
Datum berechnen geht mit http://ch.php.net/mktime
Aus dem Kopf:
Es sei denn du hast die Timestamps wirklich nur als VARCHAR abgelegt, dann kannst du natürlich nicht so einfach auf diese SQL Funktion zurückgreifen
SELECT id, date FROM table WHERE month(date) = $month;
Es sei denn du hast die Timestamps wirklich nur als VARCHAR abgelegt, dann kannst du natürlich nicht so einfach auf diese SQL Funktion zurückgreifen
Oh, month(date) ist hier eine SQL kommando oder etwas mit PHP? Bräuchte ich nicht 2 Werte (anfang Monat - ende Monat) um ein kleiner / grösser als zu basteln? Ist sql so mächtig? 
Ich habe die timestamps aktuell mit PHP generiert und dann als int(11) gepseichert. Sollte ich das mit SQL machen? Kann noch geändert werden, das Script ist noch nicht produktiv
Ich habe die timestamps aktuell mit PHP generiert und dann als int(11) gepseichert. Sollte ich das mit SQL machen? Kann noch geändert werden, das Script ist noch nicht produktiv
Leg eine neue Spalte für das Datum an (siehe phloo) und lass diesen MySQL-Befehl durchlaufen:
UPDATE namedertabelle SET neuespalte = FROM_UNIXTIME(altespalte);
Wieso jetzt Update? Ich will doch nur auslesen?
Und kann ich mit DateTime sagen dass ich alles will, das älter als 6 Stunden ist? Mit Timestamp (so mache ich das im Moment) kann man das ja berechnen time() - 6 * 60 * 60
Und kann ich mit DateTime sagen dass ich alles will, das älter als 6 Stunden ist? Mit Timestamp (so mache ich das im Moment) kann man das ja berechnen time() - 6 * 60 * 60
loeffler hatte ja schon mktime erwähnt, der timestamp ist ja fortlaufend, also im endeffekt kannst du ausgehend von deinem startdatum (hier: 1. des monats) alle ausgeben lassen, wahlweise auch eingegrenzt auf den gewünschten monat mit einer zweiten bedingung.
→ timestamp größer als start-timestamp
die anderen vorschläge der jungs mit einer zusätzlichen spalte zielen einfach darauf ab es dir mit der abfrage einfacher zu machen.
→ timestamp größer als start-timestamp
die anderen vorschläge der jungs mit einer zusätzlichen spalte zielen einfach darauf ab es dir mit der abfrage einfacher zu machen.
datetime ist das format YYYY-MM-DD HH:MM:SS, also einfach eine andere art und weise dein datum abzuspeichern.
→ http://dev.mysql.com/doc/refman/5.1/de/d...etime.html
→ http://dev.mysql.com/doc/refman/5.1/de/d...etime.html
Ja, das habe ich soweit verstanden
Ich habe das Prinzip und die Möglichkeiten von Timestamp verstanden, man kann mit einfachsten Rechenoperationen Zeitunerschiede usw angeben. Wie sage ich jetzt aber dem DATETIME dass ich alles was x Stunden älter ist als jetzt (NOW()) haben möchte?
Oder anders gefragt, ist DATETIME weniger Flexibel als TIMESTAMP oder wie komme ich mit DATETIME an die Funktionalität von einem timestamp heran? (dazu suche ich im Moment noch etwas gescheites zu lesen)
Ich habe das Prinzip und die Möglichkeiten von Timestamp verstanden, man kann mit einfachsten Rechenoperationen Zeitunerschiede usw angeben. Wie sage ich jetzt aber dem DATETIME dass ich alles was x Stunden älter ist als jetzt (NOW()) haben möchte?
Oder anders gefragt, ist DATETIME weniger Flexibel als TIMESTAMP oder wie komme ich mit DATETIME an die Funktionalität von einem timestamp heran? (dazu suche ich im Moment noch etwas gescheites zu lesen)
Editiert: 07.03.10, 23:18 Uhr
der hauptunterschied besteht sicher in der lesbarkeit für dich. ansonsten lässt sich alles umwandeln.aktueller timestamp → time()
datum zu timestamp → mktime()
timestamp zu datum → date()
eine übersicht findest du in der offiziellen dokumentation, hier die kategorie „datum/uhrzeit“-funktionen:
http://www.php.net/manual/de/ref.datetime.php
//e: ich selbst arbeite eigentlich nur mit timestamps, die umwandlung von datetime in lediglich ein datum braucht eben einen weiteren schritt mit substr() oder ggf. auch über den timestamp für andere teile. kann mich aber auch irren, möglicherweise gibt es eine funktion die ich nicht kenne
Ja, die ganze PHP Geschichte kenne ich und so mache ich das im Moment.
Bin jetzt aber etwas verwirrt ob DATETIME jetzt mehr kann oder nicht. Bzw. ob ich mit DATETIME den Monat einfacher auslesen kann. Wobei ich so langsam den Verdacht habe, dass beides genau dasselbe ist, von MySQL DATETIME nur benutzerfreundlicher angezeigt wird.
Vielen Dank für die Ausführungen allerseits
Bin jetzt aber etwas verwirrt ob DATETIME jetzt mehr kann oder nicht. Bzw. ob ich mit DATETIME den Monat einfacher auslesen kann. Wobei ich so langsam den Verdacht habe, dass beides genau dasselbe ist, von MySQL DATETIME nur benutzerfreundlicher angezeigt wird.
Vielen Dank für die Ausführungen allerseits
Mighty Mike schrieb am 07.03.10, 23:24 Uhr:
Wobei ich so langsam den Verdacht habe, dass beides genau dasselbe ist, von MySQL DATETIME nur benutzerfreundlicher angezeigt wird.
genau so sehe ich das auch und meine zu wissen, dass es auch so ist.
Mighty Mike schrieb am 07.03.10, 22:45 Uhr:
Ich habe das Prinzip und die Möglichkeiten von Timestamp verstanden, man kann mit einfachsten Rechenoperationen Zeitunerschiede usw angeben. Wie sage ich jetzt aber dem DATETIME dass ich alles was x Stunden älter ist als jetzt (NOW()) haben möchte?
Dazu gibt es bspw. die Funktion DATEDIFF(datum1, datum2). Hier gibt es noch eine ganze Übersicht, über alle Date/Time Funktionen, die dir MySQL anbietet. Von den Möglichkeiten her ist es kein Problem, das, was du oben beschrieben hast, auch per MySQL-Abfrage zu filtern. Musst deine Abfragen dann nur etwas verschachteln.
DATETIME ist viel einfacher und verständlicher als irgendein Timestamp in der DB.
Desweiteren berechnet man Zeit(unterschiede) nicht mit PHP, sondern lässt alles bereits in mySQL machen.
Stichwort ist INTERVAL, damit kannst du alles sekundengenau festlegen.
Hier findest du so ziemlich für alles wichtige ein Beispiel.
http://dev.mysql.com/doc/refman/5.1/de/d...tions.html (
)
Desweiteren berechnet man Zeit(unterschiede) nicht mit PHP, sondern lässt alles bereits in mySQL machen.
Stichwort ist INTERVAL, damit kannst du alles sekundengenau festlegen.
Hier findest du so ziemlich für alles wichtige ein Beispiel.
http://dev.mysql.com/doc/refman/5.1/de/d...tions.html (
