sacool: Mit gejointer Tabelle ordnen

Hallo,

ich bin gerade dabei ein flat(?)-Forum in PHP zu schreiben. Also eines wioe das WB-Board oder das Burning Board.
Dabei hänge ich gerade bei einer MySQL Abfrage.

Das Forum hat zwei Tabellen: Topic und Post

In Topic stehen die einzelnen Themen un in Post die Beitröäge zu den Themen. Die Tabellen sind wie folgt aufgebaut:

Topic

ID
Date
Title

Post

ID
TopicID
Date
Title
UserID
Content

Nun zu meinem Problem. Ich nöchte die Beiträge, wie das in solchen Foren üblich ist, so sortieren, dass das Thema mit dem neusten Beitrag oben steht.
Hört sich einfach an. Leider habe ich damit meine Schwierigkeiten.

Ich habe die Tabelle Post nun mit JOIN ON mit Topic verbunden, weiß aber nicht wie ich nun als ORDER BY Wert das Datum des letzen mit dem jeweiligen Topic verbunden Posts bekomme.

Meine bisherige Abfrage (ohne Sortierung):
SELECT t.ID,
 t.Title,
FROM
 topic t
JOIN
 post p
ON
 p.TopicID = t.ID

Ich hoffe man versteht was ich meine.

  1. Topic

    ID
    Date
    Title

    Post

    ID
    TopicID
    Date
    Title
    UserID
    Content

    Gibts auch eine dritte Tabelle "User"?

    Meine bisherige Abfrage (ohne Sortierung):
    SELECT t.ID,
    t.Title,
    FROM
    topic t
    JOIN
    post p
    ON
    p.TopicID = t.ID

    ORDER BY Topic.Date DESC

    1. Gibts auch eine dritte Tabelle "User"?

      Ja, es gibt auch noch einige andere Tabellen, die aber in diesem Fall eine nicht allzu große Rolle spielen. Habe nur vergessen den Eintrag zu löschen.

      ORDER BY Topic.Date DESC

      In Topic.Date soll stehen, wann das Thema gestartet wurde. Also egal, wie neu die Beiträge innerhalb des Themas sind, das Datum in Topic bleibt gleich.

      Beispiel:
      Ein Thema ist schon zwei Jahre alt und in den zwei Jahren sind hunderte von neuen Themen in die Tabelle Topic aufgenommen worden. Wenn ich nun ORDER BY Topic.Date DESC benutzen würde, würde das zwei Jahre alte Thema ganz weit unten angezeigt werden.
      Nun gibt ein User nach diesen zwei Jahren aber ein Antwort auf das Thema. Durch diesen ganz neuen Beitrag in der Tabelle Post soll auch das Topic wieder ganz oben erscheinen, sodass andere User auch mitbekommen, dass es einen neuen Beitrag gibt.

      1. Wo ist das Problem genau? Du holst Dir alle Einträge und sortierst eben nicht nach topic sondern nach Eintrag.

        1. Wo ist das Problem genau? Du holst Dir alle Einträge und sortierst eben nicht nach topic sondern nach Eintrag.

          wie meinst du das?

          1. Wo ist das Problem genau? Du holst Dir alle Einträge und sortierst eben nicht nach topic sondern nach Eintrag.
            wie meinst du das?

            Du packst in die SELECT-Liste alle Datenfelder, die Du benötigst und sortierst absteigend per SORT-Klausel nach post.date (oder wie Du das DF genannt hast).

            1. Du packst in die SELECT-Liste alle Datenfelder, die Du benötigst und sortierst absteigend per SORT-Klausel nach post.date (oder wie Du das DF genannt hast).

              Die Methode hat bei mir auch nicht wirklich funktionier.
              Habe es jetzt aber doch noch hinbekommen und zwar so (falls jemand noch mal das Problem haben sollte):

              SELECT t.ID,  
                t.Title,  
                t.Views  
              FROM  
                topic t  
              ORDER BY  
                (SELECT  
                 Datum  
                FROM  
                 post p  
                WHERE  
                 t.ID = p.TopicID  
                ORDER BY  
                 p.Datum DESC  
                LIMIT  
                 1) DESC
              
              1. SELECT t.ID,

                t.Title,
                  t.Views
                FROM
                  topic t
                ORDER BY
                  (SELECT
                   Datum
                  FROM
                   post p
                  WHERE
                   t.ID = p.TopicID
                  ORDER BY
                   p.Datum DESC
                  LIMIT
                   1) DESC

                  
                Dass das funzt.   ;)  
                  
                Wenn Du allerdings nicht die Daten zum letzten Eintrag ("post") benötigst, ist natürlich die Gruppierung, wie von globe angeregt, die richtige Wahl.
                
  2. n'abend,

    Nun zu meinem Problem. Ich nöchte die Beiträge, wie das in solchen Foren üblich ist, so sortieren, dass das Thema mit dem neusten Beitrag oben steht.

    du meinst: Du möchtest eine Liste aller Topics deines Boards sortiert nach Datum des jeweils letzten Posts eines Topics?

    Du möchtest dir die Aggregatsfunktionen in MySQL genauer anschauen.
    GROUP BY, MAX(), MIN(), COUNT() ;)

    weiterhin schönen abend...

    --
    wer braucht schon großbuchstaben?
    sh:( fo:# ch:# rl:° br:> n4:& ie:{ mo:} va:) de:] zu:} fl:{ ss:? ls:[ js:|