nur aktuelle Datensätze aus Datenbank

deusfalsus

Erfahrenes Mitglied
Ich habe in einer MySql-Datenbank ein Feld "date" im Format DATE (zB 2004-01-16).
Bei der Ausgabe sollen nur die Datensätze dabei sein, deren date im aktellen Monat oder danach liegt.
Oder zumindest so, dass alle veralteten wegfallen (die gibts dann unter 'history')

Mein Ansatz (bitte nicht lachen, wenns so arg falsch ist):
PHP:
$heute = date("Y-m-d");
$sql=("SELECT * FROM dates WHERE date>$heute");

Auf diese Weise bekomme ich aber sämtliche Datensätze ausgegeben. Dreh ich den Vergleichsoperator um, wird nichts ausgegeben.
Ist das Format DATE überhaupt für Vergleichsoperationen geeignet? Sollte ich das Datum anders in die Datenbank eintragen?

Grüße & Dank.
 
So wie ich das sehe, kann man mathematisch keine Datensätze mit "-" dazwischen vergleichen.
Ich würde an deiner Stelle den PHP Timestamp verwenden um das Datum zu schreiben.
Wenn das nicht geht, musst du wohl ein "workarround" ansteuern, hierzu folgendes:

Datum aus MySQL auslesen...

1. Möglichkeit:
Den String aufsplitten, so dass du jeden Wert (Jahr,Monat,Tag) in einer Variable hast.
Nun generierst du daraus mit date() einen PHP Timestamp und arbeitest damit weiter.

2. Möglichkeit
Die "-" aus dem String entfernen und die Daten dann vergleichen.

Ich denke, dass das ausbaufähige Ansätze sind, optimaler wäre es natürlich die Daten als PHP Timestamp in die Datenbank einzutragen.
 
hmm ... nach einigem Hin- und Herüberlegen glaube ich, es ist wohl das Einfachste, Tag Monat und Jahr einzeln in die DB zu schreiben. Das erleichtert auf jeden Fall das Vergleichen.
Aber: Werde ich dadurch spürbare Performanceverluste verursachen?
 
Man könnte natürlich das Datum rausziehen und mit explode() splitten.
Allerdings wären timestamps auch eine gute Methode!
Da fragst du zwar erstmal alles ab, aber wenn du nicht unbedingt 100.000 Datensätze hast, sollte deine DB das gut verkraften :)
 
Die Performance wirst du mit solchen geringen Datenmengen und Datenänderungen nicht drücken...

Ich wempfehle dir ein Feld zu machen und dort einen PHP Timestamp zu speichern.
Mit dem Timestamp kannst du in PHP alles ohne großes Workarround machen.
Dies hebt die Performance und senkt den Arbeitsaufwand.
 
Hi,

Ermittle die aktuelle Zahl des aktuellen Monats und des Jahres. Danach kannst du folgendes in dem SQL Statement machen:

PHP:
$sql=("SELECT * FROM dates WHERE MONTH(date) = '$month' AND YEAR(date) = '$year'");

Easy ....

Ach so, gerade für den Tag gibt es in MySQL leider keine Funktion. Aber aus deiner Fragestellung ist ersichtlich, dass der Tag ja nicht gebraucht wird.

Ciao, Jörg
 
Ich glaube die muss noch leicht abgeändert werden:

PHP:
$sql=mysql_query("SELECT * FROM dates WHERE MONTH(date) >= '$month' AND YEAR(date) >= '$year'");

Stimmts? ;)
 
*räusper* ja :) hatte nur gelesen: "welches im aktuellen Monat .... liegt" :)

Naja, jedenfalls gibt es keine Gründe, auf Timestamps umzustellen ..... Überigens: in MySQL gibt es auch die Funktion SUBSTRING(feld, anfangspos, anzahlZeichen)

Mit "SELECT SUBSTRING(date, 9, 2) AS day .... " müsste man auch den Tag herausbekommen....

Ciao, Jörg
 
Naja, ist halt so, das sich der Großteil hier überwiegend mit den Basics von MySQL auskennt und die Funktionen daraus auch nicht kennt...

Ich gehöre größtenteils auch dazu...
 
Hehe ... ich habe irgendwann mal über Amazon das MySQL Handbuch geschenkt bekommen. Das ist richtig klasse. Und es ist einfach praktisch, wenn man zum Beispiel Bit Überprüfungen gleich in der Datenbank machen kann oder halt diese Datums Sachen.

MySQL bietet schon so vieles, womit sich wirklich intellente ;) Queries bauen lassen ....

Ciao, Jörg
 
Zurück