Dari suntingan dan umpan balik komentar, inilah kueri yang menurut saya Anda cari... Prequery paling dalam akan mendapatkan postingan dan siapa yang memprakarsai postingan, komentar, dan siapa yang memposting komentar. Kueri dalam ini juga telah diurutkan sebelumnya dengan KOMENTAR TERBARU ke atas per postID. Dengan menggunakan hasil itu, saya bergabung dengan variabel sql (@variables) untuk mendapatkan @varRow meningkat setiap kali komentar baru dan mengatur ulang kembali ke 1 setiap kali ID pos berubah (karenanya PreQuery bagian dalam memesan dengan ID pos PERTAMA ). Terakhir, menggunakan klausa HAVING untuk membuat komentar @varRow count <6 akan mendapatkan PALING 5 dari setiap posting.
Jika Anda ingin membatasi posting apa yang Anda coba ambil, saya akan menerapkan klausa WHERE (seperti tanggal/waktu jika tersedia) di INNER paling banyak yang menghasilkan "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 komentarSaya BERPIKIR apa yang Anda maksud dengan "Posting Induk" yang terkait dengan komentar adalah karena mereka memiliki ID posting secara langsung. Karena kueri paling dalam melakukan penggabungan semua elemen / tabel di seluruh papan, semua ikut serta...
Post -> User (to get posting user name )
Post -> Comment (on Common Post ID -- left joined)
Comment -> User ( to get commenting user name)
Setelah ITU semua selesai dan diurutkan berdasarkan ID Postingan umum dan komentar terbaru diurutkan ke atas, saya kemudian menerapkan @vars terhadap SEMUA baris yang dikembalikan. Klausa HAVING akan menghapus komentar yang urutannya LUAR 5 yang Anda cari.