1Danke
ERLEDIGT
JA
JA
ANTWORTEN
12
12
ZUGRIFFE
390
390
EMPFEHLEN
-
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
-
07.09.09 06:32 #2
- Registriert seit
- Apr 2004
- Ort
- Die heimliche Hauptstadt des Bieres
- Beiträge
- 579
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.Think Different.
-
07.09.09 12:14 #3
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Hi Jens,
du kannst das Datum doch mit str_to_date bereits in der SQL-Abfrage ins Datumsformat umwandeln.
Gruß ThomasSollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
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
Bin für jeden Tipp dankbar, ich versuche mich hier schon eine ewingkeit und bekomme es einfach nicht hin...PHP-Code:<?
$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>
<? } ?>
danke jensGeändert von Sydney666 (07.09.09 um 21:10 Uhr) Grund: tippfehler
-
08.09.09 11:43 #5
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Du mußt bei der Umwandlung das Datum in der Form angeben wie es im String gespeichert ist:
Gruß ThomasPHP-Code:$result=mysql_query("SELECT * FROM formular WHERE STR_TO_DATE ( film_start , '%d.%m.%Y') < date ('Y.m.d')");
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
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?
-
10.09.09 10:47 #7
- Registriert seit
- Apr 2004
- Ort
- Die heimliche Hauptstadt des Bieres
- Beiträge
- 579
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-Code:$result=mysql_query("SELECT * FROM formular WHERE STR_TO_DATE ( film_start , '%d.%m.%Y') < curdate()");
Think Different.
-
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:
das muss doch zu lösen sein ?PHP-Code:<?
$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"];
?>
-
zusatz:
habe auch curdate () versucht , die gleiche Fehlermeldung.
Gruß Jens
-
10.09.09 11:55 #10
- Registriert seit
- Apr 2004
- Ort
- Die heimliche Hauptstadt des Bieres
- Beiträge
- 579
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-Code:SELECT * FROM formular WHERE STR_TO_DATE ( film_start , '%d.%m.%Y') > curdate()
Think Different.
-
Hallo, da war ein Leerzeichen. Die Fehlermeldung ist jetzt weg. Aber ich bekomme keine Ergebnis.
Danke & Gruß Jens
-
10.09.09 12:22 #12
- Registriert seit
- Apr 2004
- Ort
- Die heimliche Hauptstadt des Bieres
- Beiträge
- 579
Dann kannst du eigentlich nur noch einen Fehler in den Datumsfeldern haben. Die Beschreibung für str_to_date muß exakt so sein wie das Datum formatiert ist. Könnte z.B. - statt . sein. Oder es sind einfach keine passenden Daten drin. Die Zeile an sich stimmt, ich hab sie mit verschiedenen Schreibweisen und Datumsformaten getestet.
Think Different.
-
Hallo Danke. Es funktioniert. Durch mein rumprobieren habe ich in der Datenbank zuwischen drin das Feldformat geändert und die Daten waren nicht mehr mit Punkt getrennt. Habe das angepasst, jetzt funktioniert alles.
1000 mal Danke, Gruß Jens
Ähnliche Themen
-
Datum util zu Datum sql umwandeln
Von Champion1908 im Forum JavaAntworten: 18Letzter Beitrag: 29.07.10, 10:39 -
Datum sortieren!
Von Jacizzle im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 26.08.05, 14:15 -
datum sortieren?
Von sugar im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 04.04.05, 19:24 -
Time in Datum um wandeln | datum in alter umwandeln!! --> ich blick das nicht!
Von alive im Forum PHPAntworten: 13Letzter Beitrag: 26.03.05, 13:33 -
Sortieren nach Datum?
Von icefire im Forum PHPAntworten: 18Letzter Beitrag: 08.03.04, 11:17





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren