Сидел, думал, много думал, потом еще подумал и еще, что-то реализовал, но в итоге не пришел к идеальной структуре таблиц в базе.
Сформировалась только такая картина:
При заходе в категорию, создается строка в таблице read_category
с такими данными
id | cid | topics | posts | userid
cid - id прочитанной категории
topics - количество прочитанных тем(по умолчанию ноль). Вставляется значение по умолчанию
posts - количество ответов(по умолчанию ноль). Вставляется значение по умолчанию
При заходе в тему, создается строка в таблице read_topics
с такими данными
id | tid | posts | userid
tid - id прочитанной темы
posts - количество постов в данной теме
id и userid думаю объяснять не надо
При просмотре списка категорий формируется запрос, который проверяет текущее кол-во тем и постов и сверяет их с данными в таблице read_category.
При просмотре списка тем формируется запрос, который сверяет текущее кол-во постов с постами в таблице read_topics.
Если данные не равны, выводит жирный шрифт, иначе обычный.
Всё вроде бы работает хорошо, но есть 2 проблемы - удаление и перенос(тем и/или постов).
При удалении поста, требуется обновить все поля в таблицах read_category и read_topics где tid = текущей категории поста, а если таких over 9999 строк? Что тогда?
То же самое и с удалением тем, но там надо при обновлении вычитать посты и делать -1 на топике.
А с переносом тем, там вообще провал, если подумать. +4 запроса, если не ошибаюсь.
Может подскажите правильную структуру формирования "Прочитано/Не прочитано"?
По тому что то, что я написал сейчас, немного напоминает мне касету с дешевым порно 90-х годов.
|