Fra redigeringer og kommentarfeedback, her er den forespørgsel, jeg tror, du leder efter... Den inderste viljeforespørgsel får indlæggene, og hvem der startede indlægget, kommentarer og hvem der postede kommentarerne. Denne indre forespørgsel er også forhåndssorteret med de SENESTE KOMMENTARER til toppen pr. post-ID. Ved at bruge resultatet af det slutter jeg mig til sql-variablerne (@variables) for at få @varRow forøget hver gang en ny kommentar og nulstillet tilbage til 1 hver gang et indlægs-id ændres (deraf de indre PreQuery-ordrer efter post-ID FIRST ). Til sidst, hvis du bruger HAVING-sætningen til at få kommentarens @varRow-antal <6, får du MEST 5 af hvert indlæg.
Hvis du vil begrænse, hvilke indlæg du forsøger at hente, ville jeg anvende en WHERE-klausul (såsom dato/klokkeslæt, hvis det er tilgængeligt) på det INDERSTE mest, der genererer "PreQuery".
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
--- EDIT --- pr kommentarJeg TROR, hvad du mener med hvilket "forældreindlæg" kommentarerne er forbundet med, er fordi de har post-id'et direkte. Da den inderste forespørgsel samler alle elementer/tabeller over hele linjen, kommer alle med på turen...
Post -> User (to get posting user name )
Post -> Comment (on Common Post ID -- left joined)
Comment -> User ( to get commenting user name)
Når DET er gjort og sorteret efter fælles post-id og den seneste kommentar sorteret til toppen, anvender jeg @vars mod ALLE returnerede rækker. HAVING-sætningen vil fjerne enhver kommentar, hvor dens rækkefølge er UDOVER de 5, du ledte efter.