Neuster Wert bei GROUP BY

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

  • Neuster Wert bei GROUP BY

    Nabend,

    Ich komme bei folgendem Problem nicht mehr weiter. Ich versuche ein kleines Forum zusammenzubauen (und das mache ich solange bis ich es hinbekommen habe, aus Lernzwecken). Die GROUP-BY-Funktion funktioniert allerdings nicht so wie ich es erhofft habe.

    PHP-Code:
        $woQueryInput "SELECT
                            ForumId, ForumUid, ThreadId, ThreadForum, ThreadTitle, PostId, PostDate, PostThread, PostAuthor,
                            COUNT(PostThread) as CountPosts
                        FROM
                            forums
                        LEFT JOIN
                            threads
                        ON
                            ForumId=ThreadForum
                        LEFT JOIN
                            posts
                        ON
                            ThreadId=PostThread
                        GROUP BY
                            PostThread
                        ORDER BY
                            PostDate DESC"
    ;
        
    $woQueryResult mysql_query($woQueryInput);
        while(
    $woQueryOutput mysql_fetch_assoc($woQueryResult))
        {
            
    $woForum[] = $woQueryOutput;
        } 
    Das ergibt bei mir folgende Ausgabe:


    Wie ihr vielleicht seht, wurden mehrere Werte in PostThread gruppiert (siehe CountPosts). Allerdings ist der Wert PostDate nicht mehr aktuell, es wird der Wert angegeben der als erstes in der Liste steht. Ich möchte aber den aktuellsten Wert als Ausgabe haben. Die ganze Tabelle wurde ja auch schon sortiert, nur die einzelnen Werte von PostDate nicht.

    Könnt ihr mir vielleicht weiterhelfen?

    Gruß
    Tobey
    Zuletzt geändert von tobey; 22.11.2007, 23:21.

  • #2
    Das ist das berühmte "Sortieren vor Gruppieren" Problem, was afaik ohne Subquery nicht zu lösen ist ... irgendwo gibt es angeblich noch ne Lösung mit Join, die SUFU hilft~

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      SELECT MAX(PostDate), ...

      Kommentar


      • #4
        Super, es hat geklappt. Herzlichen Dank .

        Kommentar


        • #5
          Original geschrieben von tobey
          Super, es hat geklappt. Herzlichen Dank .
          Da bin ich mir nicht ganz sicher, da du bei deiner Version nicht nur in PostDate einen zufälligen Wert (das es der erste ist, ist nirgendes explizit definiert) erhälst, sondern auch für alle andern nicht 1 zu 1 von PostThread abhängigen Daten. Grundsätzlich sollten in solchen Abfragen alle selektierten Attribute auch in der GROUP BY-Klausel stehen. Bei Oracle muss das sogar so sein, sonst wird die Abfrage mit einem Fehler abgebrochen. MySQL ist da etwas toleranter, was dafür zu solchen Fehlern führt.
          Gruss
          H2O

          Kommentar

          Lädt...
          X