tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
760
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Gifty43 Gifty43 ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Beiträge
    115
    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-Code:
    $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-Code:
    $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-Code:
    $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
     

  2. #2
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Falls die Spalte einen MySQL-eigenen Datums-Typ besitzt, kannst du auch einfach die MySQL-eigenen Datums- und Zeit-Funktionen benutzen, etwa die NOW()-Funktion.
     
    Markus Wulftange

  3. #3
    Gifty43 Gifty43 ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Beiträge
    115
    Hat sie aber leider nicht...
     

  4. #4
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Dann benutze doch einen dieser.
     
    Markus Wulftange

  5. #5
    Gifty43 Gifty43 ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Beiträge
    115
    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.
     

  6. #6
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    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
     
    Warum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
    Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
    Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.

  7. #7
    Gifty43 Gifty43 ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Beiträge
    115
    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.
     

  8. #8
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    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
     
    Warum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
    Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
    Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.

  9. #9
    Registriert seit
    Mar 2004
    Ort
    Tiefste Provinz
    Beiträge
    304
    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 :
    1
    
    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 :
    1
    
    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.
     
    Martin

  10. #10
    Gifty43 Gifty43 ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Beiträge
    115
    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
    Geändert von Gifty43 (28.04.06 um 17:50 Uhr)
     

Ähnliche Themen

  1. into DB mit Klausel
    Von quidnovi im Forum PHP
    Antworten: 2
    Letzter Beitrag: 06.01.08, 04:10
  2. SytaxFehler in From-Klausel
    Von knowledge im Forum Visual Basic 6.0
    Antworten: 7
    Letzter Beitrag: 01.06.05, 12:21
  3. Where-Between-And-Klausel/Code
    Von No_Bie im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 11.07.04, 19:28
  4. where klausel
    Von NgiseD im Forum ASP
    Antworten: 3
    Letzter Beitrag: 02.06.02, 08:51
  5. where klausel
    Von NgiseD im Forum ASP
    Antworten: 3
    Letzter Beitrag: 13.05.02, 19:39