@vopross

Как правильно вывести комментарии с записью?

Народ подскажите как правильнее всего хранить в бд комментарии и выводить их в списке вместе с записью. Банальный пример инстаграм или вк, когда в списке под записью размещаются несколько комментарии.

Запись
3 комментария

Запись
3 комментария

Запись
3 комментария

И т.д
  • Вопрос задан
  • 346 просмотров
Решения вопроса 1
Acuna
@Acuna
Заполнил свой профиль
Самое изящное решение, чтобы как в варианте выше не тянуть за каждой записью кучу комментов (ибо представляете, сколько тогда будет запросов, если на странице будет, например, 20 записей, к каждой из которых добавлено по 10-20 комментов) заключается в том, что в таблице нужно создать колонку `parent` и заносить туда единицу, если коммент добавляется из поля ввода новой записи, иначе, если из поля, открываемого по ссылке "Ответить" - 0. Это будет означать по сути ответ на родительский коммент, который и является записью на стенке (ибо чем не запись? Текст есть, картинка есть). При выводе комментов просто выводите записи со значением `parent` = 1 другим шаблоном, например comment_parent.htm, если шаблонизатор у Вас свой - типа с серым фоном, более крупным текстом, и т. д. А комменты - comments_answer.htm. В БД создаете колонку `thread_id`, куда заносите `id` коммента, если это запись, и его же, при добавлении коммента к ней, просто получая `thread_id` родительского коммента. И самое главное - при выводе сортируйте их по thread_id и id коммента одновременно:

... AND `position` <= "3"
ORDER BY `thread_id` DESC, `id` ASC
LIMIT 0,20

Это поможет сгруппировать их в нужном порядке, причем не прибегая к GROUP BY, выводя помимо самой записи три последних коммента к ней. Писал экспромтом, реализовал относительно давно, детали опустил, но главное, что суть передал. При наличии определенных навыков и главное понимания сути это все реализовывается относительно просто. Для того я саму суть и изложил, что бы Вы поняли сам принцип. А реализация осуществляется конкретно для проекта.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vetsmen
Создай две таблицы - с новостями и с комментариями.
Когда будешь создавать новость, инициализируй ее ID.
При занесении комментария в таблицу, заноси туда так же и ID новости, к которой он принадлежит.
Потом, когда циклом прогоняться будешь, бери ID новости и прогоняй его по таблице с комментариями, если найдешь совпадения - выводи.
Ответ написан
Ваш ответ на вопрос

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

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