Sortieren nach formatiertem Datum
alpman
- datenbank
Hallo zusammen,
Ich habe eine MySQL-Datenbanktabelle, die ein Feld date hat. Die Inhalte sind in der Form JJJJ-MM-TT formatiert. Um für die Ausgabe auf einer Internetseite mit PHP das Datum in "gewohnter" Form ausgeben zu lassen, formatiere ich das Feld in der SQL-Abfrage
SELECT id, name, DATE_FORMAT(date, '%d.%m.%Y') AS date FROM game ORDER BY date DESC;
Dann wird aber z.B. der 12.11.2006 vor dem 10.12.2006 angezeigt, also
30.12.2006
12.11.2006
10.12.2006
Ich habe mir jetzt so geholfen, dass ich das formatierte Feld umbenannt habe und weiterhin nach dem Feld 'date' sortiere.
Gibt es einen anderen Weg?
Viele Grüße,
Stefan
SELECT id, name, DATE_FORMAT(date, '%d.%m.%Y') AS date FROM game ORDER BY date DESC;
Dann wird aber z.B. der 12.11.2006 vor dem 10.12.2006 angezeigt, also
Ich habe mir jetzt so geholfen, dass ich das formatierte Feld umbenannt habe und weiterhin nach dem Feld 'date' sortiere.
Gibt es einen anderen Weg?
Bleibe auf dem Pfad der Tugend und suche nicht nach einem Umweg.
Hallo,
Bleibe auf dem Pfad der Tugend und suche nicht nach einem Umweg.
Das wievielte Gebot der Softwareentwicklung ist das?
Viele Grüße,
Stefan
Hello,
SELECT id, name, DATE_FORMAT(date, '%d.%m.%Y') AS date FROM game ORDER BY date DESC;
ist das beispielhaft oder dein produktiver Code? Ich würde mich ganz weit von Schlüsselworten wie date fernhalten, früher oder später handelst du dir damit nur Probleme ein. Alter ist noch so ein beliebter Kandidat im deutschsprachigen Raum.
MfG
Rouven
--
\-------------------
He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has! -- Team Member on Jacques Villeneuve
Hallo Rouven,
Danke für den Hinweis.
Viele Grüße,
Stefan
Servus,
Gibt es einen anderen Weg?
Formatiere dein Datum mit der verarbeitenden Sprache (PHP, ...). Die Formatierung eines Wertes ist nicht Teil der Datenhaltung und hat IMO nichts in einer Datenbankabfrage verloren.
Gruss
Patrick
yo,
Die Formatierung eines Wertes ist nicht Teil der Datenhaltung und hat IMO nichts in einer Datenbankabfrage verloren.
sagt wer und warum ?
Ilja
Servus,
sagt wer und warum ?
Sag ich (schrieb ja IMO = in my opinion = meiner Meinung nach; das heisst keineswegs dass das allgemeingueltig ist ;), weil ich gerne die Datenschicht von der Anwendungsschicht trenne. Andere Daten formatiere ich ja auch mit der Anwendung, somit ist einheitlich bestimmt was wo gemacht wird. Ausserdem kennt meine Anwendung dann (gerade im Fall vom Datum) das Format der Daten.
Gruss
Patrick
Ich grüsse den Cosmos,
weil ich gerne die Datenschicht von der Anwendungsschicht trenne. Andere Daten formatiere ich ja auch mit der Anwendung,
Das du damit Absichtlich die Performance verschlechterst, ist dir aber klar? Mag sein, das es bei deinen Anwendungen kein Problem ist, aber es gibt durchaus erzunehmende Anwendungen, bei denen jede Millisekunde zählt.
Möge das "Self" mit euch sein
yo,
das ist wie manuel bereits geschrieben hat von fall zu fall verschieden. grundsätzlich stellen die dbms sehr schöne funktionen zu verschiedenen aufgaben zur verfügung, unter anderem formatierung von spaltenwerten. und dies hat auch gute gründe, die sicherlich nicht immer zum einsatz kommen müssen/sollen.
deswegen ist es besser, sich immer für eine individuelle umsetzung zu entscheiden und nicht so wie du es geschrieben hast, eine möglichkeit grundsätzlich von vorner heraus auszuschließen.
Ilja
Ich habe mir jetzt so geholfen, dass ich das formatierte Feld umbenannt habe und weiterhin nach dem Feld 'date' sortiere.
Vernünftig. (Nur der Datenfeldname 'date' ist grausam.)
Gibt es einen anderen Weg?
Du nimmst die Stringfunktionen Deines RDBMSes und zerhackst den Datumsstring in Jahr, Monat, Tag und sortierst dementsprechend.
Moin!
SELECT id, name, DATE_FORMAT(date, '%d.%m.%Y') AS date FROM game ORDER BY date DESC;
ORDER BY orientiert sich an den Aliasnamen im SELECT. Wenn du ein Feld 'date' als DATE-Typ sortierst, geschicht das chronologisch. Wenn du dieses Feld formatierst, und dem Stringergebnis dann erneut den Namen 'date' gibst, kann ORDER BY nur das Stringergebnis nach Stringregeln sortieren - das ist dann nicht mehr chronologisch.
> Ich habe mir jetzt so geholfen, dass ich das formatierte Feld umbenannt habe und weiterhin nach dem Feld 'date' sortiere.
>
> Gibt es einen anderen Weg?
Deine Lösung ist der optimale Weg - schließt aber natürlich andere Lösungswege nicht aus.
- Sven Rautenberg
--
"Love your nation - respect the others."
Hallo Sven,
Gibt es einen anderen Weg?
Deine Lösung ist der optimale Weg - schließt aber natürlich andere Lösungswege nicht aus.
Jau, wie ich an einer von King Lullys Antworten gesehen habe, muss man natürlich auch auf die Formulierung der eigenen Frage sehr viel Augenmerk legen :).
Viele Grüße,
Stefan