PHP MySQL - Sortierung mehrerer Datum-Angaben

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
565
Hallo in die Runde,

für meinen "Blog" habe ich mir Script geschrieben, welches ermöglicht, das Daten gegen ein älteres zu ersetzen. Funktioniert!

Nun habe ich die Daten in der Datenbank. Die Dazugehörige Spalte ist ein VARCHAR, da das Datum als dd.mm.yyyy gespeichert wird (besonders der punkte wegen).

die Daten sehen nun wie folgt aus:
01.01.2000
02.01.2012
02.02.2001
05.05.2007

nun ist genau aber das mein Problem- das Datum wird nicht richtig Sortiert.
im php nutze ich
PHP:
$sql = "SELECT * FROM $POSTS ORDER BY dates ASC";

jemand eine idee? :D
 
Der sortiert die schon richtig, eben als Wort.
Meiner Meinung nach solltest du es als DATE speichern, dann funktioniert die Sortierung auch problemlos. Dann musst du es nur bei der Ausgabe umformatieren und die Eingabe entsprechend umstellen, aber in meinen Augen besser als ein Datum als Varchar zu speichern. (btw warum eigentlich VARCHAR die nächsten 7988 Jahre bleibt das Datum "10-stellig" ?) ^^

MfG
 
Zuletzt bearbeitet:
Jup, da kann ich dende92 nur zustimmen.

Bei dir scheint generelle Unklarheit darüber zu herrschen, wie man verschiedene Datentypen in MySQL überhaupt speichert.

Einfach mal in der MySQL-Doku die verschiedenen Datentypen durchlesen:
http://dev.mysql.com/doc/refman/5.1/de/data-types.html

Sobald du begriffen hast, wie man bestimmte Daten speichert, wozu man Char oder Varchar unterscheidet, etc. pp., dürfte dir einiges klar werden und du dürftest dein Problem beheben können...

Dein aktuelles Problem kommt einzig und allein deshalb zustande, weil du einfach irgendwas zusammengebastelt hast, ohne dich mit MySQL ausreichend auszukennen.
 
@ascer: danke, hat mich auf jedenfall auf den richtigen weg gebracht! ich arbeite nun mit dates, und lasse via DATE_FORMAT() das Datum richtig anzeigen & sortieren! vielen dank für den link.
 
Kein Problem ;)

Manchmal muss man einfach nur wissen, wo man suchen muss bzw. welche Seite man lesen sollte (:
 
ich muss leider nochmal nachfragen.

mittels: DATE_FORMAT(dates,'%d.%m.%Y') AS dates und der entsprechenden ausgabe: $zeile['dates'] lasse ich das Datum nun ausgeben. Soweit so gut.

Aber das Sortieren klappt leider überhaupt nicht richtig.
Lass ich aber das DATE_FORMAT weg, stimmt die sortierung wieder!

gibt es auch hierfür einen trick nach deutschem format richtig zu sortieren?
neuste beiträge sollen zuerst angezeigt werden, anschließend die älteren.

Aktuell werden meine Testeinträge wie folgt ausgegeben:
01.02.2012
02.01.2012
03.01.2012
03.01.2012
05.01.2011
12.07.2011
22.12.2010

benutzen tue ich: ORDER BY dates
 
Wenn du deine Daten schon im Format 'Date' speicherst musst du sie ja nicht noch extra konvertieren o.O
und hast du bei der Sortierung schon mal 'ORDER BY dates DESC' probiert?
 
im date stehen diese aber als yyyy-mm-dd. ich brauche diese aber als dd-mm-yyyy.
daher die formatierung, aber die sortierung funktioniert im "deutschen" format nicht richtig :-(
 
Sortier doch erst einmal die Daten und formatiere sie danach sollte ja kein Unterschied ergeben
 
DATE_FORMAT formatiert dein Datum in eine Zeichenkette, also dasselbe Problem wie bei deinem ersten Post, mach die Formatierung doch z.B. in der Ausgabe. Oder du gibst das Formatierte aus, aber sortierst nach dem original.

select DATE_FORMAT(dates,'%d.%m.%Y') as dates_modified from "deine Tabelle"

Die Sortierung dann so lassen, und die Ausgabe:

$row['dates_modified']
 
Zuletzt bearbeitet:
Falls dich die Methode noch näher interessiert:

In deiner MySQL-DB legst du 'nen Feld als "Int" an (normaler Integer, 4 Byte), außerdem definierst du das Feld als "unsigned" (ohne Vorzeichen, ein Wert in dem Feld kann dann also Werte von 0 bis 4.294.967.295 annehmen).

Wenn du dann in PHP einen Zeitstempel erstellen willst, machst du folgendes:
PHP:
$timestamp1 = time(); // Speichert die aktuelle Systemzeit in Form eines Integers (Anzahl der Sekunden seit Beginn der Unix-Epoche -> 01.01.1970 um 00:00:00 Uhr)

Dein "$timestamp1" kannst du dann in deiner MySQL-DB speichern.

Wenn du das Datum formatiert haben willst, kannst du das per "date()" tun:
PHP:
date( "d.m.y | H:i", $timestamp1 );

Das würde den Zeitstempel formatieren und jetzt aktuell folgende Ausgabe erzeugen:
PHP:
04.01.12 | 20:31

Wenn du für ein bestimmtes Datum einen Zeitstempel erstellen willst, tust du das wie folgt:
PHP:
$timestamp2 = mktime( $Stunde, $Minute, $Sekunde, $Monat, $Tag, $Jahr );

Für genauere Informationen googel im Netz einfach nach PHP5 und "time()", "date()" und "mktime()".
 
Zuletzt bearbeitet:
Zurück
Oben