D'après les modifications et les commentaires des commentaires, voici la requête que je pense que vous recherchez ... La requête la plus interne obtiendra les publications et qui a lancé la publication, les commentaires et qui a publié les commentaires. Cette requête interne est également pré-triée avec les COMMENTAIRES LES PLUS RÉCENTS en haut par postID. En utilisant le résultat de cela, je me joins aux variables sql (@variables) pour obtenir le @varRow augmenté à chaque fois qu'un nouveau commentaire et remis à 1 chaque fois qu'un ID de publication change (d'où les commandes PreQuery internes par ID de publication FIRST ). Enfin, l'utilisation de la clause HAVING pour que le compte @varRow du commentaire <6 obtienne au MOST 5 de chaque message.
Si vous souhaitez limiter les publications que vous essayez de récupérer, j'appliquerais une clause WHERE (telle que date/heure si disponible) au maximum INNER qui génère la "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 commentJe pense que ce que vous entendez par "Parent Post" auquel les commentaires sont associés, c'est parce qu'ils ont directement l'ID de publication. Étant donné que la requête la plus interne effectue une jointure de tous les éléments/tables à travers le tableau, tous arrivent pour le voyage...
Post -> User (to get posting user name )
Post -> Comment (on Common Post ID -- left joined)
Comment -> User ( to get commenting user name)
Une fois que tout est fait et trié par ID de publication commun et commentaire le plus récent trié en haut, j'applique ensuite les @vars à TOUTES les lignes renvoyées. La clause HAVING supprimera tout commentaire dont la séquence est AU-DELÀ des 5 que vous recherchiez.