Från redigeringarna och kommentarsfeedbacken, här är frågan jag tror du letar efter... Den inre förfrågan får inläggen och vem som startade inlägget, kommentarer och vem som postade kommentarerna. Denna inre fråga är också försorterad med de SENASTE KOMMENTARER högst upp per post-ID. Med hjälp av resultatet av det går jag med i sql-variablerna (@variables) för att få @varRow ökad varje gång en ny kommentar och återställs tillbaka till 1 varje gång ett inläggs-ID ändras (därav de inre PreQuery-ordningarna efter post-ID FIRST ). Slutligen, genom att använda HAVING-satsen för att få kommentarens @varRow-antal <6 kommer att få högst 5 av varje inlägg.
Om du vill begränsa vilka inlägg du försöker hämta, skulle jag tillämpa en WHERE-klausul (som datum/tid om tillgängligt) på INNER mest som genererar "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 --- per kommentarJAG TROR att det du menar med vilket "föräldrainlägg" som kommentarerna är förknippade med är för att de har inläggets ID direkt. Eftersom den innersta frågan sammanfogar alla element/tabeller över hela linjen, följer alla med på resan...
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 är gjort och sorterat efter vanligt inläggs-ID och den senaste kommentaren sorterad till toppen, tillämpar jag @vars mot ALLA returnerade rader. HAVING-satsen tar bort alla kommentarer där sekvensen är BUTOM de 5 du letade efter.