Z edycji i opinii o komentarzach, oto zapytanie, którego, jak sądzę, szukasz... Najbardziej wewnętrzne zapytanie wstępne pobiera posty i kto zainicjował post, komentarze i kto je opublikował. To wewnętrzne zapytanie jest również wstępnie posortowane z NAJNOWSZYMI KOMENTARZAMI na górze według identyfikatora postID. Korzystając z tego wyniku, łączę się ze zmiennymi sql (@zmienne), aby @varRow zwiększał się za każdym razem, gdy nowy komentarz i resetował do 1 za każdym razem, gdy zmienia się identyfikator postu (stąd wewnętrzne zamówienia PreQuery według identyfikatora postu PIERWSZE ). Na koniec, użycie klauzuli HAVING, aby liczba @varRow komentarza <6 osiągnęła MAKSYMALNIE 5 każdego posta.
Jeśli chcesz ograniczyć posty, które próbujesz pobrać, zastosuję klauzulę WHERE (taką jak data/godzina, jeśli jest dostępna) na najbardziej INNER, która generuje "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
--- EDYTUJ --- za komentarz MYŚLĘ, że masz na myśli to, z którym „postem nadrzędnym” są powiązane komentarze, ponieważ mają bezpośrednio identyfikator posta. Ponieważ najbardziej wewnętrzne zapytanie łączy wszystkie elementy / tabele na całej tablicy, wszystkie są gotowe do jazdy...
Post -> User (to get posting user name )
Post -> Comment (on Common Post ID -- left joined)
Comment -> User ( to get commenting user name)
Kiedy to wszystko zostanie zrobione i posortowane według wspólnego identyfikatora posta i najnowszego komentarza posortowanego do góry, następnie zastosuję @vars do WSZYSTKICH zwróconych wierszy. Klauzula HAVING usunie każdy komentarz, którego sekwencja wykracza poza 5, których szukałeś.