Datum richtig sortieren!

maeg

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem: Habe mir eine Funktion gebaut mit der ich wichtige Termine eintragen kann, jetzt will ich, dass die Termine nach Datum sortiert werden. Hierfür habe ich in die SQL -Abfrage einfach order by date eingebaut. Das funktioniert soweit auch ganz gut, allerdings überprüft er nur die ersten 2 Zahlen vom Datum..

05.05.2005

So steht das Datum bei mir in der Datei, er checkt halt nur die "05", danach hört er auf. Ich will aber, dass er auch den tag und das Jahr berücksichtigt! Wäre echt klasse, wenn mir jemand helfen könnte!

Gruß, Magnus
 
Dann speicher einfach die Daten im Format JJJJ-MM-TT ab und verwende den feldtyp DATE.
Dann klappt das auch.
Da du das Datum aber al String (char / varchar) speicherst ist es logisch das die Sortierung aus sich eines Datums nicht korrekt ist.
 
es soll aber weiterhin "05.05.2005" nicht dastehen, das datum soll schon genau so erhalten bleiben.

mfg magnus
 
Wäre es nicht besser, das Datum als UNIX-Timestamp zu speichern? Dann hast du eine Integerzahl in deiner Datenbank stehen (die Anzahl der seit dem 01.01.1970, 00:00 Uhr vergangenen Sekunden) und nach so einer Zahl sortiert es sich besser. Abgesehen davon kannst du dann dein Datum mit der Date-Funktion genau so ausgeben, wie du willst.

Den Timestamp kannst du in PHP übrigens mittels mktime bestimmen (wenn du keine Uhrzeit hast, einfach nur Nullen einsetzten).


Der Doc!
 
DrSoong hat gesagt.:
Wäre es nicht besser, das Datum als UNIX-Timestamp zu speichern? Dann hast du eine Integerzahl in deiner Datenbank stehen (die Anzahl der seit dem 01.01.1970, 00:00 Uhr vergangenen Sekunden) und nach so einer Zahl sortiert es sich besser. Abgesehen davon kannst du dann dein Datum mit der Date-Funktion genau so ausgeben, wie du willst.

Den Timestamp kannst du in PHP übrigens mittels mktime bestimmen (wenn du keine Uhrzeit hast, einfach nur Nullen einsetzten).


Der Doc!

geht sicherlich nur muss die ganze umformatierung im Script gemacht werden, was wesentlich unperformanter ist als wenn man das der DB überlässt. Es sortiert sich in der DB dann genausogut wie ein DATE / DATETIME Feld.
Nur muss es aus der DB wieder in ein lesbares Datum gewandelt werden. Und das kostet wie gesagt mehr Rechenzeit. Es mag aber sein das es bei nur 10 oder 20 Datensätzen nicht ins Gewicht fällt.
 
die ausgabe funktioniert jetzt richtig, jetzt muss er nur noch richtig sortieren, habe mal schon die suche benutzt aber nichts gefunden, dass funktioniert:

hier der code:

Code:
$Datum = date("d-m-Y");
 
$Anfrage = "SELECT *,date_format(datum,'%d.%m.%y') as datum from date order by datum";
$holen=mysql_query($Anfrage);
while($row=mysql_fetch_object($holen))
{
echo"$row->datum - $row->name<br>";
}
 
Zuletzt bearbeitet:
Weil ich vor einem ähnlichen Problem stand und beim Googlen auf dieser Seite gelandet bin, möchte ich der vollständigkeit halber hier noch schreiben, wie es bei mir funktioniert hat. Das Problem in der Abfrage ist, dass Du in dem Fall natürlich auch wieder nach den modifizierten Datum sortierst, darum solltest Du das 'modifizierte' Datum nicht so nennen wie die original Spalte, denn sortieren soll er ja nach dem Format wie es in der DB steht.
Also:

Code:
$Datum = date("d-m-Y");
 
$Anfrage = "SELECT *,date_format(datum,'%d.%m.%y') as m_datum from date order by datum";
$holen=mysql_query($Anfrage);
while($row=mysql_fetch_object($holen))
{
echo"$row->m_datum - $row->name<br>";
}
 
Hi!
find ich klasse, dass nach fast 2 Jahren noch jemand ne Antwort schreibt :)
inzwischen bin ich aber soweit, dass ich alles mit timestamps mache.. ;)

trotzdem danke!

lg.
 
Zurück