Fretchen
10-08-2002, 16:41
Hallo zusammen!
Also... ich hab ein kleines Gästebuch entwickelt und hab jetzt ein mittelkleines Sortierungsproblem bei der Ausgabe der Datensätze.
Ich lese die Daten ein über $query="SELECT * FROM gaestebuch ORDER BY datum DESC, zeit DESC".
Logisch gesehen sortiert er mir die Datensätze jetzt erst nach dem Datum und dann nach der Zeit... die unlogische Ausgabe (Augenmerk bitte auf den mit * gekennzeichneten Datensatz) sieht folgendermaßen aus:
Datum - Zeit - Benutzer
07.08.02 - 15:25 Uhr - Tester
07.08.02 - 14:42 Uhr - Tester
07.08.02 - 12:28 Uhr - Tester
06.08.02 - 22:29 Uhr - Tester
*10.08.02 - 16:12 Uhr - Tester *
Die Datenfelder Datum und Zeit habe ich als VARCHAR deklariert. Könnte der Fehler daran liegen?
Danke für eure Hilfe!
Gruß
Fretchen
MelloPie
10-08-2002, 17:00
Definier die Felder als date dann gehts varchar wird nicht als datum sortiert. btw brauchst Du nicht datum und zeit trennen...
datetime geht auch.
Ja, so ist es !
Anstatt zwei Felder für datum und Zeit zu verwenden, nimm doch ein Feld mit dem Datentyp datetime. Das Format wäre dann 'YYYY-MM-DD HH:MM:SS'.
http://www.mysql.com/doc/en/Date_and_time_types.html
Nicht nur das Sortieren wird dann ordnungsgemäß abgehandelt, sondern auch Datums- und Zeitoperationen (Addition, Subtraktion, ...) werden unterstützt
http://www.mysql.com/doc/en/Date_and_time_functions.html
Fretchen
10-08-2002, 17:09
Hey... das ging aber mal wieder fix. Danke!
Hm... datetime... damit habe ich vorher gearbeitet. Problem hierbei: Ich möchte bei der Ausgabe der Daten zuerst den Namen des Verfassers ausgeben. Darunter erscheinen zwei kleine Grafiken (Brief- und Haussymbol) für evtl. angegebene E-Mail bzw. Homepage-Adressen. Darunter folgt das Datum und dann wiederrum in einer neuen Zeile die Zeit. Kann ich das Feld datetime auch anschließend beim auslesen "aufsplitten"? Wenn das ginge, dann steige ich gerne auf datetime um.
Logo kannst Du das ...
SELECT DATE_FORMAT('1997-10-04 22:23:00', '%d-%m-%Y'); --> 04-10-1997
SELECT DATE_FORMAT('1997-10-04 22:23:00', '%Y/%m'); --> 1997/10
http://www.mysql.com/doc/en/Date_and_time_functions.html
Fretchen
10-08-2002, 18:42
Ich glaub ich krieg's nie so richtig auf die Reihe...
Also: Erst mal vielen Dank an euch alle für die schnellen Antworten. Ne blöde Frage habe ich allerdings noch auf Lager:
Wie zum Henker muß ich denn jetzt den Befehl an die MySQL-Datenbank übergeben?
Ich lese die Datensätze über eine While-Schleife in ein Array ein. Wie bekomm ich denn jetzt das Datum bzw. die Zeit aus meinem MySQL-Datetime-Feld heraus (und wie wandle ich die dann in ein anderes Format (Datumformat: TT.MM.JJJJ / Zeitformat: HH:MM) um Sie anschließend getrennt von einander ausgeben zu können?
Ich hab jetzt schon ein wenig hin und her probiert... aber ich bekomms einfach nicht hin (PHP ist doch nicht sooooo einfach, wie ich zuerst dachte).
Nochmals vielen Dank für eure Tips und Hilfestellungen.
Gruß
Fretchen
Das machst Du mit MySQL Mitteln in der MySQL Query. Füge die date_format() Anweisung Deiner NySQL Query hinzu:
SELECT
name,
ort,
date_format(datumintabelle,'%d.%m.%Y') AS handdatum,
date_format(datumintabelle,'%H:%i') AS handzeit
FROM
tabelle
ORDER BY
datumintabelle DESC
jetzt kannst Du auf die Felder "handdatum" und "handzeit" (definiert mit Hilfe von AS ..., SELECT-Feldnamen kannst vergeben wie es Dir gefällt) zugreifen genauso wie auf die Felder name,ort, etc.
Fretchen
10-08-2002, 18:59
oh man... dat war ja mal wieder ne schwere geburt.
ich hab die ganze zeit versucht über ne separate query den befehl an die mysql-datenbank zu schicken und bekam jedes mal nur merkwürdige bezeichnungen ausgesteuert, aber nicht das geforderte datum.
herzlichen dank hand!
ohne euren (wirklich genialen) support hier, könnte ich mich das ein oder andere mal erschiessen.
dann versuch ich jetzt mal mein glück...
mfg
fretchen