@SweetLemonade

Как реализовать последнее сообщение на форуме?

Реализовываю базовые функции форума. Сколько раз не подходил к реализации форума, то всегда есть сложности. А именно не дают покоя следующие вопросы:

1. У каждой категории форума есть "Последнее сообщение". Вроде бы понятно, что можно просто сохранять идентификатор последнего поста в этой категории. То есть нам нужно будет каждый раз обновлять категорию, когда дело касается добавления/редактирования/удаления сообщения в этой категории.

Но все становится еще веселее, когда мы добавляем подкатегории в нашу категорию, где тоже есть темы и сообщения. Получается, что мы теперь должны каждый раз при добавлении/редактировании/удалении сообщения, пройти всю цепочку категорий, чтобы обновить идентификатор последнего сообщения.

По-моему это глупо. По крайней мере, если смотреть со стороны целостности данных. Ибо всегда найдется забытое действие, которое разрушит нашу целостность.

Еще есть идея: не хранить в БД идентификатор последнего поста у категории, а каждый раз доставать его из общего списка сообщения по идентификатору категории и сортировке по дате создания. Разумеется, кешировать это дело на некий период.

2. У каждой категории форума есть кол-во сообщений и тем. Как лучше сделать? Каждый раз подсчитывать по новой с кешированием, либо хранить в БД и при каждом добавлении/редактировании/удалении инкрементировать счетчик.

Какие у вас есть идеи? Как реализовывали бы вы?
  • Вопрос задан
  • 2366 просмотров
Пригласить эксперта
Ответы на вопрос 2
sabramovskikh
@sabramovskikh
Запросом брать одно последнее по дате сообщение для ветки форума
SELECT * FROM my_table ORDER BY date DESC LIMIT 1 WHERE id_category = xx

Что-то вроде этого
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
И то и другое.
Сделать кэширование, причем при каждом добавлении/редактировании/удалении кэш сбрасывается.
Если где-то забудем - не беда, просто цифра повисит немного дольше. Потом заметим и исправим.

Про сложности первого вопроса, куда и зачем там ходить - не понял.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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