Aus den Bearbeitungen und dem Kommentar-Feedback ist hier die Abfrage, nach der Sie meiner Meinung nach suchen ... Die innerste Vorabfrage erhält die Posts und wer den Post initiiert hat, Kommentare und wer die Kommentare gepostet hat. Auch diese innere Abfrage ist mit den NEUESTEN KOMMENTAREN nach oben pro PostID vorsortiert. Mit dem Ergebnis davon verbinde ich mich mit den SQL-Variablen (@variables), um die @varRow jedes Mal zu erhöhen, wenn ein neuer Kommentar kommt, und jedes Mal, wenn sich eine Post-ID ändert, auf 1 zurückzusetzen (daher die inneren PreQuery-Ordnungen nach Post-ID ZUERST ). Wenn Sie schließlich die HAVING-Klausel verwenden, um die @varRow-Anzahl des Kommentars <6 zu haben, werden die MEISTEN 5 jedes Beitrags erreicht.
Wenn Sie einschränken möchten, welche Posts Sie abrufen möchten, würde ich eine WHERE-Klausel (z. B. Datum/Uhrzeit, falls verfügbar) am INNEREN anwenden, die die "PreQuery" generiert.
select straight_join
PreQuery.*,
@varRow := if( @LastPost = PreQuery.PostID, @varRow +1, 1 ) CommentRow,
@LastPost := PreQuery.PostID PostID2
from
( select
posts.id PostID,
posts.body,
posts.CreatedAt,
u1.id UserID,
u1.DisplayName NameOfPoster,
c.id,
c.userid CommentUserID,
c.text CommentText,
u2.DisplayName CommentUserName
from
posts
join users u1
on posts.ownerUserID = u1.id
LEFT JOIN comments c
on posts.id = c.PostID
join users u2
on c.userid = u2.id
where
posts.id = TheOneParentIDYouWant
OR posts.parentid = TheOneParentIDYouWant
order by
posts.ID,
c.id desc ) PreQuery,
(select @varRow := 0, @LastPost = 0 ) SQLVars
having
CommentRow < 6
order by
PreQuery.postid,
CommentRow
--- BEARBEITEN --- pro Kommentar Ich denke, was Sie mit dem "übergeordneten Beitrag" meinen, mit dem die Kommentare verknüpft sind, ist, weil sie die Beitrags-ID direkt haben. Da die innerste Abfrage alle Elemente/Tabellen auf der ganzen Linie verbindet, kommen alle mit auf die Reise...
Post -> User (to get posting user name )
Post -> Comment (on Common Post ID -- left joined)
Comment -> User ( to get commenting user name)
Sobald DAS alles erledigt und nach der gemeinsamen Beitrags-ID und dem neuesten Kommentar nach oben sortiert ist, wende ich dann die @vars auf ALLE zurückgegebenen Zeilen an. Die HAVING-Klausel entfernt alle Kommentare, deren Sequenz JENSEITS der 5 ist, nach denen Sie gesucht haben.