Из комментариев об изменениях и комментариях, вот запрос, который, я думаю, вы ищете ... Внутренний запрос будет получать сообщения и кто инициировал публикацию, комментарии и кто оставил комментарии.Этот внутренний запрос также предварительно отсортирован с НАИБОЛЕЕ ПОСЛЕДНИЕМИ КОММЕНТАРИИ к вершине на postID.Используя этот результат, я присоединяюсь к переменным sql (@variables), чтобы увеличить @varRow при каждом новом комментарии и сбросить его на 1 при каждом изменении идентификатора поста (отсюда и внутренние порядки PreQuery по идентификатору поста FIRST).).Наконец, с помощью предложения HAVING, чтобы количество комментариев @varRow <6 получалось на уровне MOST 5 каждого сообщения. </p>
Если вы хотите ограничить количество сообщений, которые вы пытаетесь получить, я бы применил предложение WHERE (например, дата / время (если доступно) в INNER, который генерирует «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
--- РЕДАКТИРОВАТЬ --- за комментарий Я ДУМАЮ, что вы подразумеваете под "родительским сообщением", с которым связаны комментарии, потому что они имеют идентификатор сообщения напрямую.Поскольку самый внутренний запрос выполняет объединение всех элементов / таблиц по всем направлениям, все вместе отправляются в путешествие ...
Post -> User (to get posting user name )
Post -> Comment (on Common Post ID -- left joined)
Comment -> User ( to get commenting user name)
После того, как ТО выполнено и отсортировано по общему идентификатору поста и большинствунедавний комментарий отсортирован по началу, затем я применяю @vars ко всем возвращаемым строкам.Предложение HAVING удалит любой комментарий, где его последовательность находится за 5 раз, которые вы искали.