Kleines Problem mit ORDER BY

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kleines Problem mit ORDER BY

    Hallo zusammen!

    Also... ich hab ein kleines Gästebuch entwickelt und hab jetzt ein mittelkleines Sortierungsproblem bei der Ausgabe der Datensätze.

    Ich lese die Daten ein über $query="SELECT * FROM gaestebuch ORDER BY datum DESC, zeit DESC".

    Logisch gesehen sortiert er mir die Datensätze jetzt erst nach dem Datum und dann nach der Zeit... die unlogische Ausgabe (Augenmerk bitte auf den mit * gekennzeichneten Datensatz) sieht folgendermaßen aus:

    Datum - Zeit - Benutzer

    07.08.02 - 15:25 Uhr - Tester
    07.08.02 - 14:42 Uhr - Tester
    07.08.02 - 12:28 Uhr - Tester
    06.08.02 - 22:29 Uhr - Tester
    *10.08.02 - 16:12 Uhr - Tester *

    Die Datenfelder Datum und Zeit habe ich als VARCHAR deklariert. Könnte der Fehler daran liegen?

    Danke für eure Hilfe!

    Gruß

    Fretchen

  • #2
    Definier die Felder als date dann gehts varchar wird nicht als datum sortiert. btw brauchst Du nicht datum und zeit trennen...
    datetime geht auch.
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Ja, so ist es !

      Anstatt zwei Felder für datum und Zeit zu verwenden, nimm doch ein Feld mit dem Datentyp datetime. Das Format wäre dann 'YYYY-MM-DD HH:MM:SS'.
      http://www.mysql.com/doc/en/Date_and_time_types.html

      Nicht nur das Sortieren wird dann ordnungsgemäß abgehandelt, sondern auch Datums- und Zeitoperationen (Addition, Subtraktion, ...) werden unterstützt
      http://www.mysql.com/doc/en/Date_and...functions.html

      Kommentar


      • #4
        Hey... das ging aber mal wieder fix. Danke!

        Hm... datetime... damit habe ich vorher gearbeitet. Problem hierbei: Ich möchte bei der Ausgabe der Daten zuerst den Namen des Verfassers ausgeben. Darunter erscheinen zwei kleine Grafiken (Brief- und Haussymbol) für evtl. angegebene E-Mail bzw. Homepage-Adressen. Darunter folgt das Datum und dann wiederrum in einer neuen Zeile die Zeit. Kann ich das Feld datetime auch anschließend beim auslesen "aufsplitten"? Wenn das ginge, dann steige ich gerne auf datetime um.

        Kommentar


        • #5
          Logo kannst Du das ...

          SELECT DATE_FORMAT('1997-10-04 22:23:00', '%d-%m-%Y'); --> 04-10-1997

          SELECT DATE_FORMAT('1997-10-04 22:23:00', '%Y/%m'); --> 1997/10

          http://www.mysql.com/doc/en/Date_and...functions.html

          Kommentar


          • #6
            Ich glaub ich krieg's nie so richtig auf die Reihe...

            Also: Erst mal vielen Dank an euch alle für die schnellen Antworten. Ne blöde Frage habe ich allerdings noch auf Lager:

            Wie zum Henker muß ich denn jetzt den Befehl an die MySQL-Datenbank übergeben?

            Ich lese die Datensätze über eine While-Schleife in ein Array ein. Wie bekomm ich denn jetzt das Datum bzw. die Zeit aus meinem MySQL-Datetime-Feld heraus (und wie wandle ich die dann in ein anderes Format (Datumformat: TT.MM.JJJJ / Zeitformat: HH:MM) um Sie anschließend getrennt von einander ausgeben zu können?

            Ich hab jetzt schon ein wenig hin und her probiert... aber ich bekomms einfach nicht hin (PHP ist doch nicht sooooo einfach, wie ich zuerst dachte).

            Nochmals vielen Dank für eure Tips und Hilfestellungen.

            Gruß

            Fretchen

            Kommentar


            • #7
              Das machst Du mit MySQL Mitteln in der MySQL Query. Füge die date_format() Anweisung Deiner NySQL Query hinzu:
              Code:
              SELECT
                         name,
                         ort,
                         date_format(datumintabelle,'%d.%m.%Y') AS handdatum,
                         date_format(datumintabelle,'%H:%i') AS handzeit
              FROM
                         tabelle
              ORDER BY
                         datumintabelle DESC
              jetzt kannst Du auf die Felder "handdatum" und "handzeit" (definiert mit Hilfe von AS ..., SELECT-Feldnamen kannst vergeben wie es Dir gefällt) zugreifen genauso wie auf die Felder name,ort, etc.

              Kommentar


              • #8
                oh man... dat war ja mal wieder ne schwere geburt.

                ich hab die ganze zeit versucht über ne separate query den befehl an die mysql-datenbank zu schicken und bekam jedes mal nur merkwürdige bezeichnungen ausgesteuert, aber nicht das geforderte datum.

                herzlichen dank hand!

                ohne euren (wirklich genialen) support hier, könnte ich mich das ein oder andere mal erschiessen.

                dann versuch ich jetzt mal mein glück...

                mfg

                fretchen

                Kommentar

                Lädt...
                X