Выборка определенных подкомментариев к комментариям из mysql
Есть таблица. comments ( id,date_create,topic_id,user_id,text,user_polls,parent_comment_id)
Здесь хранятся комментарии к топику(теме). Потом идут комменты основные. у них parent_comment_id == 0.
И хранятся там же подкомментарии для основных комментариев, у которых parent_comment_id == comments.id.
Вопрос: Как выбрать все комментарии я знаю. А вот как выбрать по три последних подкомментария для комментария основного я не в курсе. Не делать же запрос для каждого основного комментария. Пример: стена в ВК. Подкомментарии одноуровневые.
Вариант 1
Добавьте поле mpath и храните в нем полный путь к от перового родителя до текущего элемента, тогда:
SELECT * FROM comments where mpath like 'id_первого родителя,%' ORDER BY id DESC LIMIT 3;
Вариант 2
На уровне php проанализируйте parent_id и установите первого родителя для всех записей
Нет, Nested Set будет работать однозначно быстрее, если не будет сложных сортировок. Эти деревья куда быстрее работают на выборках, чем рекурсии при «parent_comment_id» методе.
Кхмм. А не требуется, разве, переписать right поле у всего дерева вверх и left с right у соседних с права веток, при добавлении нового элемента в дерево? Да, при выборке, только один селект можно использовать, без циклов и вложенных запросов.
Но вот при добавлении приходится юзать по мимо инсерта, ещё и не хилый апдейт, который затрагивает очень много строк в БД. А если спустя нескольких миллионов записей. Будет добавлен саб коммент к первому в дереве комментарию? Это же наверно 99% всей базы обновить нужно через right = right + 2.
Я бы в этом случае добавил в таблицу поле level для хранения уровня вложенности.
А если нужно еще и иерархию выстроить, то Nested Sets, но если боитесь нагрузок, то можно у каждого комментария дополнительно хранить id корневого комментария — так будет более быстрое подобие Nested Sets, но с определенными недостатками.