Nach Datum sortieren

Zipper02

Mitglied
Hallo,

also ich hab gerade eben schon nach anderen Threads gesucht, die das Thema behandeln, hab aber nichts passendes gefunden.

Also ich hab eine Tabelle in der jetzt für ne Gamesite Clanwars eingetragen werden.
Die möchten das nach Datum sortiert haben, aber wenn ich ORDER BY date DESC mache sortiert er mir das nach Tagen.
Ich möchte, dass er mir das halt zuerst nach dem Jahr 1999,2000,2001...
und dann nach Monat 04,05,06 und dann nach Tag 13,14,15.

Meine Daten sind in der DB so eingetragen:

24.05.2002
29.05.2002
usw...

Ich hoff ihr versteht mich.
Danke für Hilfe :)
 
Was für ein Typ hat dein Feld 'date'? z.B. 24.05.2002 lässt auf String (respektive TEXT o.ä) schließen, und das ist für ein Datum nicht sehr günstig. Du wirst auch Schwierigkeiten kriegen so anständig zu sortieren.

Mit der Funktion substr (http://de3.php.net/manual/de/function.substr.php) kannst du einen String zerlegen. Das wirst du in dem Fall wohl machen müssen.

Geschickter wäre es, für das Feld in deiner Datenbank den Typ DATE zu benutzen. So weiß mySQL (wie ich annehme) direkt, dass es sich um ein Datum handelt, und du kannst das ganze besser sortieren. Wenn es dir keine zu große Mühe ist, würd ich das lieber in der DB ändern, statt einen workaround zu basteln. Die Daten müssen dann in der Form YYYY-MM-DD in die Datenbank eingetragen werden.
 
Zuletzt bearbeitet:
Also ich würde dir vorschlagen, das ganze mit dem UNIX-Timestamp zu machen!
Den kannst du bequem mit time() ermitteln und in die DB eintragen.Dann kannst du ihn in deiner gewünschten Reihenfolge auslesen und dann mit der date() Funktion nach deinen Wünschen formatieren!
 
Original geschrieben von vanteX
Also ich würde dir vorschlagen, das ganze mit dem UNIX-Timestamp zu machen!
Den kannst du bequem mit time() ermitteln...

Ja, aber so erhält er die aktuelle Zeit. Ich denke nicht, dass das so gewünscht ist. Wahrscheinlich trägt er seine Clanwars nicht im Augenblick des Stattfindens ein. Wenn doch, ginge das auch einfacher; in der DB ein Feld vom Typ TIMESTAMP anlegen - fertig. Das Feld wird dann automatisch auf die aktuelle Zeit gesetzt, sofern nichts anderes angegeben wird.

Aber wie gesagt, wahrscheinlich wird er die Einträge nachträglich machen, und dann bräuchte er den timestamp von z.B. gestern... Darüber hinaus ist die Uhrzeit (die ja auch im Timestamp steckt hier wohl irrelevant).

Ich bleib dabei, wenn du ein Datum eintragen willst, nutze den Feldtyp DATE :-)
 
Wenn er es mit Timestamps macht die aber das Datum von Gestern, Vorgestern etc. haben sollen, dann gibt es die Möglichkeit mit mktime() das Datum in die entsprechende Timestamp zu konvertieren.

Vorschlag:
Ein Formular in dem das Datum eingetragen wird. Tag | Monat | Jahr als drei Felder. Die Variableninhalte dieser Felder an mktime() übergeben und in einer anderen Variablen speichern. Diese dann in die DB eintragen.
Beim Auslesen und anzeigen dann einfach mittles date() wieder in ein normales Format konvertieren lassen.
 
jo ok ich probier das mal danke.
das mit den timestamps is keine gute idee.
wenn ich z.b. clanwars eintragen möchte, die schon länger her sind (1 Jahr) bringt nen timestamp irgendwie au nix.
 
Also ich seh immernoch die einfachste Variante in der Lösung mit dem DATE bzw. DATETIME Feld in der Datenbank. Du speicherst das Datum ganz einfach in der Form JJJJ-MM-TT in der Datenbank. Formatiert bekommst du das ganze in etwa so:
PHP:
$dbzeit = strftime ("%Y-%m-%d", time ());

// oder auch

$dbzeit = $jahr."-".$monat."-".$tag;

// wenn du die Werte z.B. einzeln aus einem Formular bekommst.

Um das ganze dann beim Auslesen wieder richtig zu formatieren, liest du das Datum entweder aus der Datenbank aus und formatierst es dann, oder du machst das ganze bereits mit SQL:
PHP:
$sql = "SELECT feld1, feld2, DATE_FORMAT(datum, '%d.%m.%Y') AS zeit FROM tabelle ...";

// hier hast du dann das formatierte Datum im Feld "zeit" gespeichert.

Auf diese Weise kannst du ganz normal das Datum sortieren und du hast auch den Vorteil einen größeren Wertebereich als bei TIMESTAMP zu haben.
 
Zurück