@belimovlab
о себе кратко

Выборка определенных подкомментариев к комментариям из mysql

Есть таблица. comments ( id,date_create,topic_id,user_id,text,user_polls,parent_comment_id)

Здесь хранятся комментарии к топику(теме). Потом идут комменты основные. у них parent_comment_id == 0.

И хранятся там же подкомментарии для основных комментариев, у которых parent_comment_id == comments.id.

Вопрос: Как выбрать все комментарии я знаю. А вот как выбрать по три последних подкомментария для комментария основного я не в курсе. Не делать же запрос для каждого основного комментария. Пример: стена в ВК. Подкомментарии одноуровневые.
  • Вопрос задан
  • 3065 просмотров
Пригласить эксперта
Ответы на вопрос 6
@sumjohn
SELECT * FROM comments GROUP BY parent_comment_id ORDER BY id DESC LIMIT 3;
Ответ написан
Комментировать
@zednight
Вариант 1
Добавьте поле mpath и храните в нем полный путь к от перового родителя до текущего элемента, тогда:
SELECT * FROM comments where mpath like 'id_первого родителя,%' ORDER BY id DESC LIMIT 3;

Вариант 2
На уровне php проанализируйте parent_id и установите первого родителя для всех записей
Ответ написан
Комментировать
sirko_el
@sirko_el
Попробуйте Nested Set вместо вашего подхода. Из личного опыта скажу, что Вам будет намного проще с ним работать.
Ответ написан
frostosx
@frostosx
Я бы в этом случае добавил в таблицу поле level для хранения уровня вложенности.
А если нужно еще и иерархию выстроить, то Nested Sets, но если боитесь нагрузок, то можно у каждого комментария дополнительно хранить id корневого комментария — так будет более быстрое подобие Nested Sets, но с определенными недостатками.
Ответ написан
Комментировать
MpaK999
@MpaK999
Буду!
выбрать все через select * from `comments` order by parent_comment_id
а потом отрисовать уже по этому массиву рекурсивно и закэшировать.
Ответ написан
Комментировать
Crank
@Crank
Есть еще вариант организации деревьев как в Битриксе, не самое простое решение в техническом плане, но существенно экономит ресурсы при работе с БД www.miraweb-studio.ru/blog/2013/03/bitrix_tree.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы