Problem mit ORDER By

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

  • Problem mit ORDER By

    Hallo,

    ich hänge schon seit längeren an dieser stelle fest.
    Und zwar entwickle ich gerade ein kleines Forum das die Threads in einem Forum nach Datum und Uhrzeit sortieren soll.
    Dabei wird geguckt in welchem Thread der neuste Beitrag ist, dieser wird bei jeder Antwort in lastpostdate und lastposttime geschrieben.

    Ich frage also wie folgt ab:

    SELECT *FROM thread WHERE boardid = '$boardid' ORDER By lastposttime, lastpostdate DESC

    Leider sortiert er dann entweder nach Datum ODER Uhrzeit.

    Kann mir jemand sagen wo der Fehler liegt ?

    Bin erst seit kurzem dabei PHP zu programmieren und mit SQL Abfragen kenne ich mich auch nicht besonders gut aus.

  • #2
    Re: Problem mit ORDER By

    Original geschrieben von phpdeveloper
    Kann mir jemand sagen wo der Fehler liegt ?
    Der Fehler liegt hier:
    Dabei wird geguckt in welchem Thread der neuste Beitrag ist, dieser wird bei jeder Antwort in lastpostdate und lastposttime geschrieben.
    Es ist absolut unsinnig, Datum und Zeit auseinanderzureissen und in zwei Spalten abzulegen.

    Schreibe es in eine Spalte; Nutze einen der Datums- und Zeit-Typen, den dir die DB zur Verfügung stellt.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Es ist sogar schon unsinnig, die zeit des letzten Posts nochmal in die Thread-Relation zu schreiben. Die Zeit eines Posts steht doch bestimmt schon in dem Post selbst? Das ist überhaupt nicht normalisiert und redundant. Das was wahsaga bereits sagte kommt noch dazu.

      Trotz allem:

      mal "ORDER By lastposttime ASC, lastpostdate DESC" probiert?
      Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

      Kommentar


      • #4
        Danke für die hilfreichen Antworten!

        Bin gerade dabei erstmal eine Tabelle names lastpost als Datentyp DATETIME anzulegen und dann dort den Datum mit Uhrzeit zusammen vom letzten Beitrag zu speichern.

        Und MySQL ordnet dann auch automatisch richtig nach Datum UND Uhrzeit wenn ich ORDER By lastpost DESC benutze ?

        Kommentar


        • #5
          ... eine Tabelle names lastpost als Datentyp DATETIME anzulegen ...
          hier ist ein wort falsch. welches?
          Und MySQL ordnet dann auch automatisch richtig nach Datum UND Uhrzeit wenn ich ORDER By lastpost DESC benutze?
          mal ausprobiert?

          Kommentar


          • #6
            ja, sortiert es, aus einem ganz einfachen grund...

            DATETIME ist systemintern eigentlich ein string... zugegeben mit besonderer Logik... however

            die schreibweise des engl datumsformats gibt jedem teil der datumszeit-angabe sozusagen eine wertigkeit...

            dadurch, dass der teil mit der höchsten dauer (jahr) ganz vorne steht und der mit der kleinsten dauer(sekunde) ganz hinten... die teile dazwischen sind ebenfalls "richtig" eingeordnet...

            YYYY-MM-DD HH:MM:SS

            2007-04-24 17:13:48
            2007-05-24 17:13:48
            2007-06-24 18:10:10

            als einfache textfolge oder als zahl (ohne - : und blanks) betrachtet ergibt sich die sortierreihenfolge zwangsläufig...


            greetz, high
            Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
            When everything else fails, manipulate the data...
            Beschriftungen / Großformatdruck / Werbemittel

            Kommentar


            • #7
              Vielen Dank für euere Hilfe und großes Lob an diese Community.
              Konnte das Problem nun endlich lösen

              Habe die Tabellenstruktur und die Abfragen nun so geändert das nur noch nach lastpost (DATETIME) sortiert wird.

              Antwortet jemand auf ein Thread wird in der Tabelle thread der Eintrag von lastpost erneuert damit die Threads in der richtigen Reihenfolge angezeigt werden (neustes ganz oben etc.).

              In thread werden nur noch die Zeitangaben createdate und createtime und lastpost gespeichert.
              Createdate und createtime hab ich angelegt damit man noch sehen kann wann das Thread erstellt wurde.

              In der Tabelle posts werde ich die Einträge createdate und createtime ganz raus nehmen da der gleiche Wert schon in der lastpost Spalte gesichert wird.

              Original geschrieben von penizillin
              hier ist ein wort falsch. welches?
              Hab wohl Spalte und Tabelle vertauscht
              Zuletzt geändert von phpdeveloper; 24.05.2007, 17:54.

              Kommentar


              • #8
                Noch als Tipp, bevor du auf die Idee kommst das ausgegeben Datum zum Anzeigen mit Stringfunktionen zu bearbeiten damit es "deutsch" aussieht. DATE_FORMAT

                http://dev.mysql.com/doc/refman/5.0/...on_date-format

                Kommentar


                • #9
                  In thread werden nur noch die Zeitangaben createdate und createtime und lastpost gespeichert.
                  Createdate und createtime hab ich angelegt damit man noch sehen kann wann das Thread erstellt wurde.
                  Das is doch schon der gleiche Fehler wie beim "lastpost". Das ist nicht atomitär, nagut, es ist viel zu atomitär *g*! Normalisierung ist das Stichwort!
                  Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

                  Kommentar

                  Lädt...
                  X