Nach Datum sortieren

Slater

Erfahrenes Mitglied
Ich habe folgendes Problem:
In der MySQL Datenbank habe ich das Datum folgendermassen:
z.B 2002-12-31
in der ausgabe möchte ich es 31.12.2002
Geschaft habe ich das nun. Doch wenn ich jetzt ORDER BY Datum die Ausgabe nach dem Datum sortieren will, ordnet es mir die Daten nicht nach dem ganzen Datum, sondern nur nach den Tagen:

(Soll Ausgabe)
06.10.2002
22.11.2002
01.12.2002
02.12.2002
23.12.2002

(Ist Ausgabe)
01.12.2002
02.12.2002
06.10.2002
22.11.2002
23.12.2002

KAnn mir da jemand helfen?


PHP:
$Datum = date("Y").'-'.date("m").'-'.date("d");
$Verbindung = mysql_connect ($Host, $User, $Passwort);
mysql_select_db ($Datenbank);
$Anfrage = "SELECT *,date_format(Datum,'%d.%m.%y') as Datum from Trainings WHERE Datum >= '$Datum' ORDER BY Datum";
$result = mysql_query($Anfrage,$Verbindung);
 while ($ausgabe = mysql_fetch_array ($result)
 
Also, ein paar Punkte die mir aufgefallen sind:

1. Das Datum machst du sehr umständlich, möglich ist einfach das folgende zu benutzen:
PHP:
<?php

$Datum = date("Y-m-d");

?>

2. Um bei MySQL nach Datum zu sortieren musst du darauf achten, das dein Tabellenfeld auch die Eigenschaft "date" besitzt! Glaube das ist bei dir der Fehler.

3. Für die Ausgabe machst du dann einfach ein einfaches explode oder eine einfache kleine Funktion...

PHP:
<?php

function datum($datum) {
  $datum = explode("-", $datum);	
  echo $datum[2].".".$datum[1].".".$datum[0];
}

?>

Have Fun
 
Speicher doch einfach anstatt des bereits formatierten Datums den Timestamp in deiner DB. So wird alles richtig geordnet. Den Timestamp kannst du dann bei der Ausgabe formatieren.
 
$Datum = date("Y").'-'.date("m").'-'.date("d");
$Verbindung = mysql_connect ($Host, $User, $Passwort);
mysql_select_db ($Datenbank);
$Anfrage = "SELECT *,date_format(Datum,'%d.%m.%y') as Datum from Trainings WHERE Datum >= '$Datum' ORDER BY Datum";
$result = mysql_query($Anfrage,$Verbindung);
while ($ausgabe = mysql_fetch_array ($result)


***
Für Dich ist das Problem sicher längst erledigt (siehe 22.12.02).. aber vielleicht kann ich anderen noch helfen, die das gleiche Problem haben..

So kann es nicht funktionieren..

wenn Du 'ORDER BY Datum' sagst, kommt der Fehler, weil er wahrscheinlich nach dem zweiten 'Datum' sortiert, also nach Zahlen..

versuch es mal mit
date_format(Datum,'%d.%m.%y') as Datum2 from Trainings
(unterschiedliche Namen)

Nach dem Umbenennen in Datum2 (oder anders) kannst Du dann sagen
'ORDER BY DATUM'.. dann zeigt er Dir die Ausgabe auch nach Datum an..

Habs eben ausprobiert... geht :) Ich hatte nämlich genau den gleichen Fehler

$geraete_liste=mysql_query("select *,
date_format(datum_rueckgabe, '%d.%m.%Y') as rueckgabe_datum
from tabelle_verleih, tabelle_geraete
where geraete_verleih_verweis=geraete_id
order by datum_rueckgabe
");


(Gruß an meinen Dozenten)
 
Zuletzt bearbeitet:
Hmmm also ich hab das gleiche Problem bei mir klappt das halt immer noch nich...

SQL-Query:
PHP:
$sql="SELECT *, DATE_FORMAT(matches_date, '%d.%m.%Y') AS 'matches_date', DATE_FORMAT(matches_time, '%H:%i') AS 'matches_time', DATE_FORMAT(matches_moddate, '%d.%m.%Y &nbsp; %H:%i:%S') AS 'matches_moddate', DATE_FORMAT(matches_traveltime, '%H:%i') AS 'matches_traveltime'
FROM hop_matches LEFT JOIN hop_autors ON hop_matches.autors_ID = hop_autors.autors_ID
ORDER BY ".$sort." ".$order_by."";
...wobei $sort(matches_date,matches_time...) und $order_by (ASC,DESC) per GET-Variablen übergeben werden (Sortierfunktion nach verschiedenen Kriterien)

So sieht der Link aus, der nach dem Datum sortiert
PHP:
<a href="index.php?site=overview&sort=matches_date&order_by=<?php echo $order_by; ?>">Datum</a>

Und das sortiert so:
10.12.2007
16.02.2008
20.12.2007
>>> das Datum wird also wie eine Zahl behandelt...

Kann mir da jemand behilflich sein?
 
Das Problem ist das du den Namensraum matches_date überschreibst durch DATE_FORMAT(matches_date, '%d.%m.%Y') AS matches_date, du solltest der spalte einen anderen Alias geben. Dann kannst du auch noch weiterhin nach der Datumsspalte Sortieren und er Sortiert nicht nach dem Formatierten String.
 
Ich habe das nun zu n_matches_date umbenannt und nach dem sortiert, doch das klappt noch immer nicht, genau die gleiche Sortierung wie bisher-.-


_edit: Achsooo nein es geht, danke vielmals!! ..Ich hab das erst missverstanden... hab dann beider Sortierung auch den Namen geändert, doch es muss ja nach dem "originalen Datum aus der DB" sortieren. Dankeee :p ..das gleiche müsste ich wohl nun auch noch bei Timestamp, Time etc. machen.. :p
 
Zuletzt bearbeitet:
Zurück