Spezielle WHERE-Klausel

Gifty43

Erfahrenes Mitglied
Hallo Leute,

Seit langem hab ich wieder mal ein Problem bei welchem ich nicht mehr weiterkomme und hoffe, dass ihr mir dabei helfen könnt.;)

Ich habe eine Tabelle mit Computerspielen, sowie deren Releasedaten und möchte nun eine kleine Releaseliste machen. Dabei sollen NUR die nächsten 5 Releases ausgegeben werden.

Das Problem: In der Datenbank sind die Releasedaten so eingetragen: TT.MM.JJJJ (Bsp: 28.04.2006)

Meine Abfrage sieht derzeit so aus:
PHP:
$release_q = mysql_query("SELECT * FROM games WHERE release < '$datum' ORDER BY release ASC LIMIT 5");

In der Variable $datum habe ich folgendes reingeschrieben:
PHP:
$datum = date("d.m.Y");
Damit wird das aktuelle Datum in der gleichen Reihenfolge TT.MM.JJJJ eingelesen, damit er die dann auch vergleichen kann.

Aber anscheind scheint das nicht funktionieren. Bei meinen Nachforschungen habe ich dann festgestellt, dass er das Datum in JJJJ-MM-TT (Bsp: 2006-04-29) haben muss um die vergleichen zu können. (Warum auch immer...)

Deshalb habe ich mal folgendes Script gebastelt, damit ich das Datum aus der DB in ein JJJJ-MM-TT Datum umwandeln kann:
PHP:
$reldate = explode(".",release); //Das release kommt aus der DB
$reldate = $reldate[2]."-".$reldate[1]."-".$reldate[0];
$reldate = strtotime($reldate);

Das funktioniert auch soweit wenn ich ein Datum vorgebe, aber die Frage ist jetzt:

Wie bekomm ich dieses Script in die Abfrage?

Wär super wenn mir einer von euch einen Tipp geben könnte.
Wenn ihr noch mehr Details wissen müsst, lasst es mich wissen.

Besten Dank schonmal im Voraus.

Gruss,
Gifty
 
Und wie soll das gehen?
Da mein Datum schon in der Form TT.MM.JJJJ in der DB steht, muss ich das nicht noch umwandeln. Er soll das einfach als solches erkennen.
 
Um ein Datum als solches zu erkennen, gibt es den Datentyp DATE und die Syntax eines DATE entspricht nun mal ISO 8601und nicht dem im Deutschen üblichen Datumsformat.

MySQL ist zum Glück nicht wie Word oder Excel und nimmt nicht einfach mal an, dass Dein Feld diese oder jene Bedeutung haben soll.

Wie man solche Modellierungsfehler korrigiert, wurde hier schon mehrfach besprochen (temporäre Spalte mit alter table, Update mit substring und concat, Feld löschen temporäre Spalte umbenennen).

Du kannst natürlich in jedem Query mit substring und concat ein entsprechendes Feld zum Sortieren bauen, sinnvoll wäre es jedoch, dies nur einmal zu machen.

Gruß hpvw
 
Das Datum in der DB MUSS das TT.MM.JJJJ Format haben. Ich brauch einfach ne Abfrage in der das Datum als solches erkannt wird.
 
Wenn Du es groß und fett schreibst, antworte ich einfach mal: Das Datum MUSS in der Datenbank als yyyy-mm-tt gespeichert werden, in Ausnahmefällen vielleicht, wenn es gar nicht anders geht oder im spezifischen Fall extreme Performance-Vorteile bietet als Unix-Timestamp, also int.

Du kannst Dir jederzeit in der Abfrage mit DATE_FORMAT die gewünschte Ausgabe erzeugen. Du must aber jedes mal Klimmzüge machen, wenn Du Selektionen bezüglich des Datums (früher, später, im Interval, sortieren, etc.) machen willst und das Datum im deutschen Format als Char speicherst.

Wenn Du diese Mühen später haben willst, solltest Du Dir, wie bereits erwähnt, die Funktionen substring und concat anschauen.

Gruß hpvw
 
Eigentlich hat hpvw schon recht, auch ich kann mir keinen Grund vorstellen, aus dem man ein Datum in MySQL nicht als DATE speichern sollte. Aber was weiß denn ich, was andere für Gründe haben. Deshalb sag ich einfach mal:
Code:
STR_TO_DATE(str, format)
Das ist praktisch das Gegenteil von DATE_FORMAT und macht aus dem String str, der im Format format vorliegt ein echtes, verwertbares MySQL-Datum. In Deinem Fall müsste es heißen:
Code:
STR_TO_DATE(`release`, '%d.%m.%Y')
Ist allerdinge eine etwas neuere Funktion, keine Ahnung ab welcher Version genau, schätze aber mal, dass es mindestens 4.0 sein muss.
Mit älteren Versionen muss man ein paar mehr Funktionen neinander verschachteln, aber gehen tut's auch irgendwie. Aber wie gesagt, die beste Lösung ist immer: Datum in DATE-Spalte.
 
Genau sowas hab ich gesucht!

THX schonmal ManicMarble, werds heut Abend gleich mal ausprobieren obs klappt...

Edit: Klappt wunderbar... :) BIG THX nochmal, hast was gut bei mir^^
 
Zuletzt bearbeitet:
Zurück