Bei dieser Antwort wird davon ausgegangen, dass Sie für jeden Kommentar eine eindeutige ID haben und dass es sich um eine steigende Zahl handelt. Das heißt, spätere Posts haben höhere Nummern als frühere Posts. Muss nicht sequentiell sein, muss nur der Reihenfolge der Eingabe entsprechen.
Zuerst eine Abfrage, die die maximale Kommentar-ID extrahiert, gruppiert nach Post-ID.
Etwas wie folgt aus:
SELECT MAX(ID) MaxCommentID, PostID
FROM Comments
GROUP BY PostID
Dies wird Ihnen eine Liste der Post-ID ist, und die höchste (neuesten) Kommentar-ID für jeden.
Dann verbinden Sie sich damit, um den Rest der Daten aus den Kommentaren für diese IDs zu extrahieren.
SELECT C1.*, C2.PostID
FROM Comments AS C1
INNER JOIN (
SELECT MAX(ID) MaxCommentID, PostID
FROM Comments
GROUP BY PostID
) AS C2 ON C1.CommentID = C2.MaxCommentID
Dann werden Sie mit den Beiträgen beitreten, um die Informationen über diese Beiträge zu erhalten.
SELECT C1.*, P.*
FROM Comments AS C1
INNER JOIN (
SELECT MAX(ID) MaxCommentID, PostID
FROM Comments
GROUP BY PostID
) AS C2 ON C1.CommentID = C2.MaxCommentID
INNER JOIN Posts AS P ON C2.PostID = P.ID
Ein alternativer Ansatz, um die PostID der inneren Abfrage überhaupt nicht verwenden. Wählen Sie zuerst die maximale Kommentar-ID für alle eindeutigen Posts aus, aber egal, welchen Post wir kennen, sie sind einzigartig.
SELECT MAX(ID) AS MaxCommentID
FROM Comments
GROUP BY PostID
Dann eine IN-Klausel tun, um den Rest der Daten für diese Äusserungen zu bekommen:
SELECT C1.*
FROM Comments
WHERE C1.ID IN (
SELECT MAX(ID) AS MaxCommentID
FROM Comments
GROUP BY PostID
)
dann einfach in den Beiträgen kommen:
SELECT C1.*, P.*
FROM Comments AS C1
INNER JOIN Posts AS P ON C1.PostID = P.ID
WHERE C1.ID IN (
SELECT MAX(ID) AS MaxCommentID
FROM Comments
GROUP BY PostID
)
Wenn ein Beitrag nicht unbedingt Kommentare haben, verwenden Sie den linken äußeren Join nicht den inneren Join zwischen den Beiträgen und Kommentaren – u07ch