alpman: Sortieren nach formatiertem Datum

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

  1. 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.

    1. Hallo,

      Bleibe auf dem Pfad der Tugend und suche nicht nach einem Umweg.

      Das wievielte Gebot der Softwareentwicklung ist das?

      Viele Grüße,

      Stefan

  2. 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
    
    1. Hallo Rouven,

      Danke für den Hinweis.

      Viele Grüße,

      Stefan

  3. 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

    --
    sh:( fo:| ch:? rl:( br:> n4:( ie:% mo:) va:} de:> zu:) fl:| ss:| ls:[ js:|
    1. yo,

      Die Formatierung eines Wertes ist nicht Teil der Datenhaltung und hat IMO nichts in einer Datenbankabfrage verloren.

      sagt wer und warum ?

      Ilja

      1. 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

        --
        sh:( fo:| ch:? rl:( br:> n4:( ie:% mo:) va:} de:> zu:) fl:| ss:| ls:[ js:|
        1. 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

          --
          Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...
          ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
        2. 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

  4. 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.

  5. 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."
    
    1. 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