Van de bewerkingen en feedback op opmerkingen, hier is de vraag waarvan ik denk dat u naar op zoek bent... De meest innerlijke prequery krijgt de berichten en wie de post heeft gestart, opmerkingen en wie de opmerkingen heeft geplaatst. Deze innerlijke vraag is ook voorgesorteerd met de MEEST RECENTE COMMENTAAR bovenaan per postID. Met behulp van het resultaat daarvan, doe ik mee aan de sql-variabelen (@variables) om de @varRow elke keer dat een nieuwe opmerking wordt toegevoegd te verhogen en elke keer dat een post-ID verandert weer terug te zetten naar 1 (vandaar de innerlijke PreQuery-bestellingen per post-ID FIRST ). Ten slotte zal het gebruik van de HAVING-clausule om het @varRow-aantal van de opmerking <6 te hebben, MEESTE 5 van elk bericht krijgen.
Als je wilt beperken welke berichten je probeert op te halen, zou ik maximaal een WHERE-clausule (zoals datum/tijd indien beschikbaar) toepassen die de "PreQuery" genereert.
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
--- BEWERK --- per reactie. IK DENK wat je bedoelt met welke "Ouderpost" de reacties zijn gekoppeld, omdat ze de post-ID rechtstreeks hebben. Aangezien de binnenste query een samenvoeging van alle elementen / tabellen over de hele linie doet, komen ze allemaal mee voor de rit...
Post -> User (to get posting user name )
Post -> Comment (on Common Post ID -- left joined)
Comment -> User ( to get commenting user name)
Zodra DAT allemaal is gedaan en gesorteerd op algemene post-ID en meest recente opmerking bovenaan, pas ik de @vars toe op ALLE geretourneerde rijen. De HAVING-clausule verwijdert elke opmerking waarvan de volgorde BEYOND de 5 is waarnaar u op zoek was.