Datum zum Sortieren umwandeln.

Sydney666

Grünschnabel
Hallo zusammen, ich bin neu hier und hoffe auf eure nette Hilfe.

Ich habe in der Datenbank das Datum leider im Format tt.mm.yyyy und als Feldtyp varchr. Ich weis das sind keine guten Vorausetzungen aber leider bekomme ich das Datum nur in diesem Format in die Datenbank.
Ich möchte nun folgendes realisieren. In der Datenbank werden Filmtitel gespeichert immer ca. 2 Monate im voraus. Ich möchte nun eine Abfrage erstellen welche mir alle Datensätze anzeigt die in der Zukunft liegen.
Wie muß ich meine Abfrage aufbauen das sie mir nur die Datensätze anzeigt die in der Zukunft liegen?
Ich habe da 2 Ideen als Ansatz die ich aber leider nicht in der Lage bin zu realisieren.
1 Ansatz:
Die Daten werden über eine Formular in die Datenbank eingetragen. Gibt es eine Möglichkeit die Daten aus dem Formulars gleichzeitig in ein zweites Tabellenfeld zu schreiben welches als Date formatiert ist, natürlich müssten die Felddaten dann vorher entsprechnede so umgewandelt werden damit sie zum Feld passen.
2. Ansatz:
Die Daten aus der Datenbank auslesen umformen und dann sortieren das sie nach dem richtigen Datum sortiert sind.

Ich würde mich freuen hier Hilfe zu bekommen, bestimmt wurde das Thema schon mehrfach behandelt. Leider konnte ich die für mich richtige Lösung nicht finden.

Gruß Jens
 
Hallo,

deine Lösungsansätze sind im Prinzip richtig. Für mich wäre der erste sinnvoller, da dann eine Sortierung gleich durch MySql stattfinden kann. Dazu brauchst du aber Zugriff auf den Programmteil, in dem die Daten geschrieben werden. In dem Fall könntest du aber das Ganze schon vor dem Schreiben umformen und in ein date Feld schreiben. Falls aber das deutsche Datum bleiben muß, wäre die wohl einfachste Form der Umwandlung die explode() Funktion. Damit zerlegst du das deutsche Datum, mit dem Punkt als Trenner, in ein Array und gruppierst es anschließend neu.
Explode() wäre auch das Richtige für die zweite Lösung. Da müssen halt die Daten erst in ein Array geschrieben werden. Dann werden, entweder schon beim Auslesen oder in einer extra Schleife danach, die deutschen Daten so wie oben umgeformt und anschließend das Array nach dem Datum sortiert.
Für mich ist die zweite Lösung aber die deutlich aufwendigere. Wenn du also Zugriff auf die Schreibroutine hast, wäre die erste vorzuziehen.
 
Hallo, ich habe das mir dem str_to_date mal versucht bekomme das aber nicht hin, ich bekomme nicht das ergebnis was ich haben möchte. hier mal mein code. nach der abfrage erstelle ich meine auswerte tabelle. in der db steht in der spalte film_start das datum leider in varchr und im format dd.mm.yyyy

PHP:
<?

    $result=mysql_query("SELECT * FROM formular WHERE STR_TO_DATE ( film_start , '%Y.%m.%d') < date ('Y.m.d')");
    while($row=mysql_fetch_array($result)) {
    $ID=$row["ID"];
    $film_titel=$row["film_titel"];
    $film_start=$row["film_start"];
    
?>

<table border="0" width="620">
    <hr width="620" size="1">
   <TR>
      <td width="350" height="27"><p align="left"><font size="2"><a href="film_detail.php?<?="ID=$ID"?>"><?=$film_titel?></a></TD>
      <td width="150" height="27"><p align="left"><font size="2"><a href="film_detail.php?<?="ID=$ID"?>"><?=$film_start?></a></TD>
    </TR>

    <? } ?>

Bin für jeden Tipp dankbar, ich versuche mich hier schon eine ewingkeit und bekomme es einfach nicht hin...

danke jens
 
Zuletzt bearbeitet:
Du mußt bei der Umwandlung das Datum in der Form angeben wie es im String gespeichert ist:

PHP:
$result=mysql_query("SELECT * FROM formular WHERE STR_TO_DATE ( film_start , '%d.%m.%Y') < date ('Y.m.d')");

Gruß Thomas
 
Hallo Thomas,

leider geht das auch nicht wenn ich das so eintrage wie Du geschrieben hast. Es zeigt mir kein Ergebnis an. Habe in der DB extra Datensätze in der Vergangenheit und in der Zukunft angelegt. Keine Anzeige?
Irgendwie will das nicht klappen.

Gruß Jens

Hat noch jemand einen Tipp wie man das vielleicht lösen kann?
 
date() bei MySql erwartet ein bestimmtes Datum als Wert, was mit 'Y.m.d' ja nicht gegeben ist. Du mußt also entweder den PHP Befehl date() verwenden oder gleich curdate(), da es sich ja scheinbar um das jeweils aktuelle Datum handelt.
PHP:
$result=mysql_query("SELECT * FROM formular WHERE STR_TO_DATE ( film_start , '%d.%m.%Y') < curdate()");
 
Hallo danke für die Antwort,

jetzt bekomme ich eine Fehlermeldung:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\test\vorschau_test.php on line 91
zeile 91 ist while ..
hier nochmal mein code:
PHP:
<?

    $result=mysql_query("SELECT * FROM formular WHERE STR_TO_DATE ( film_start , '%d.%m.%Y') > curdate ('Y.m.d')");
    while($row=mysql_fetch_array($result)) {
    $ID=$row["ID"];
    $film_titel=$row["film_titel"];
    $film_start=$row["film_start"];
    
?>

das muss doch zu lösen sein ?
 
Wenn du das aus deinem Script rauskopiert hast, mußt du genau auf die Leerzeichen achten. PHP ist da großzügiger. Nach curdate und den Klammern darf kein Leerzeichen sein. Mit dieser Zeile hat es bei meinem Test funktioniert:
PHP:
SELECT * FROM formular WHERE STR_TO_DATE ( film_start , '%d.%m.%Y') > curdate()
 
Zurück