Richtig Sortieren

Ultraflip

Erfahrenes Mitglied
Hi Leute ...

Ich hab in einer Datenbak eine Spalte die komplett mit Daten (=von Datum) gefüllt ist ... also

Code:
02.01.2005
03.01.2005 
...

Das Problem ist nur wenn ich die Abfrage über

PHP:
SELECT * FROM datenbank ORDER BY Datum ASC

dann sortiert er mir die nach den ersten beiden Zahlen und nicht nach dem eigentlichen Datum ... leider hab ist die Tabelle über eine Excelliste gefüllt worden und zu viel um im Nachhinein noch ein Timestamp draus zu machen ... wie kann ich dennoch eine Ausgabe der Tabelle nach Datum geordnet erreichen?

MfG
Ultraflip
 
Ich hab gerad mal ein bißchen rumgespielt und evtl ne Lösung gefunden! SQL hat ne nette Funktion die sich MID nennt. Damit kann man einen Teilbereich aus einer Zeichenkette schneiden.

Dein Problem hab ich versucht nachzustellen und hab dabei folgende SQL benutzt:

Code:
 SELECT Tabelle1.a, Mid(a,7,4) & Mid(a,4,2) & Mid(a,1,2) AS DatumRevert
 FROM Tabelle1
 GROUP BY Tabelle1.a, Mid(a,7,4) & Mid(a,4,2) & Mid(a,1,2)
 ORDER BY Mid(a,7,4) & Mid(a,4,2) & Mid(a,1,2);
 
LotseDerLotsen hat gesagt.:
gib jedem Eintrag eine id, die du auf auto_increment setzt.
Dann kannst du sagen: ORDER BY id
und hast kein Problem mehr mit den Daten

was unglaublich viel Sinn macht, wenn man nach Datum sortieren will ;)
 
Kyrius hat gesagt.:
was unglaublich viel Sinn macht, wenn man nach Datum sortieren will ;)

Japp ... da die Daten nicht immer nach der Reihenfolge vorliegen ... sonst müsst ich sie ja nicht sortieren ;) ... die Liste soll dann auch so weitergeführt werden ... von daher bringt eine einmalige Sortierung vorher auch nix ...
 
M4st3r hat gesagt.:
Ich hab gerad mal ein bißchen rumgespielt und evtl ne Lösung gefunden! SQL hat ne nette Funktion die sich MID nennt. Damit kann man einen Teilbereich aus einer Zeichenkette schneiden.

Dein Problem hab ich versucht nachzustellen und hab dabei folgende SQL benutzt:

Code:
 SELECT Tabelle1.a, Mid(a,7,4) & Mid(a,4,2) & Mid(a,1,2) AS DatumRevert
 FROM Tabelle1
 GROUP BY Tabelle1.a, Mid(a,7,4) & Mid(a,4,2) & Mid(a,1,2)
 ORDER BY Mid(a,7,4) & Mid(a,4,2) & Mid(a,1,2);

Klappt leider nicht ... :(
 
Ultraflip hat gesagt.:
Japp ... da die Daten nicht immer nach der Reihenfolge vorliegen ... sonst müsst ich sie ja nicht sortieren ;) ... die Liste soll dann auch so weitergeführt werden ... von daher bringt eine einmalige Sortierung vorher auch nix ...

ok wenn du mir erklären kannst, warum nach der ID sortieren soll, wenn man nach dem Datum sortiert haben will, verdienst du meinen Respekt.

Ich warte :]
 
Oliver hat die sinnvollste Lösung ja schon angeschnitten:

Leg in deiner Tabelle eine neue Spalte mit dem Datentyp "DATE" an (nennen wir sie mal zwischenzeitlich 'datum2').

Um nun deine Daten in einem Rutsch in das neue Format zu transformieren, genügt folgende Abfrage:
Code:
UPDATE `tabelle` SET `datum2` = STR_TO_DATE(`datum`, '%d.%m.%Y')
Eine sortierte Ausgabe erhältst du dann wie gewohnt mit:
Code:
SELECT * FROM `tabelle` ORDER BY `datum2` ASC
Es steht dir nach dieser Aktion natürlich frei, die Spalte mit den alten Datensätzen zu löschen, und die Spalte mit den neuen in 'datum' umzubenennen.


@Kyrius:
Kyrius hat gesagt.:
ok wenn du mir erklären kannst, warum nach der ID sortieren soll, wenn man nach dem Datum sortiert haben will, verdienst du meinen Respekt.

Ich warte :]
Da kannst du lang warten, weil du den Beitrag von Ultraflip anscheinend falsch verstanden hast. Er hat dir ja zugestimmt, dass eine Sortierung über eine ID nicht möglich ist.
 
Danke Matthias!

Meine Abfrage sieht jetzt so aus ...

PHP:
$abfrage = "SELECT * FROM tabelle ORDER BY STR_TO_DATE(Datum, '%d.%m.%Y') ASC";

Mit dieser Abfrage wird die Ausgabe richtig nach Datum sortiert ... das hat mir jede Menge Umschreiberei erspart ... (eine Spalte mehr, hätte ja dann auch bei den Eingaben mit berücksichtigt werden müssen ...)

So funktioniert alles :-)
 
Zurück