# Nach Datum sortieren



## Slater (22. Dezember 2002)

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?



```
$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)
```


----------



## Flex (22. Dezember 2002)

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

$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

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

?>
```

Have Fun


----------



## cardex (22. Dezember 2002)

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.


----------



## MICHALLICA (7. April 2005)

$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*)


----------



## uafsc (7. November 2007)

Hmmm also ich hab das gleiche Problem bei mir klappt das halt immer noch nich...

SQL-Query:

```
$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

```
<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?


----------



## Michael Engel (7. November 2007)

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.


----------



## uafsc (7. November 2007)

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  ..das gleiche müsste ich wohl nun auch noch bei Timestamp, Time etc. machen..


----------

