Какой самый эффективный способ запомнить состояние чтения / непрочитания для нескольких элементов? - PullRequest
2 голосов
/ 27 ноября 2008

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

Единственное решение, которое я могу себе представить, это что-то, что сбрасывает запись в базу данных каждый раз, когда пользователь посещает поток. Я предполагаю, что может быть кнопка «пометить все как прочитанное», которая может использовать временную отметку, чтобы помочь уменьшить разрастание в базе данных ... несмотря на то, что это решение не впечатляет меня.

У меня такое ощущение, что я что-то здесь упускаю ... может быть, утро в День благодарения - не время для размышлений над проблемами программирования.

Есть ли лучшее решение для этого? Есть идеи?

Ответы [ 3 ]

2 голосов
/ 27 ноября 2008

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

1 голос
/ 27 ноября 2008
  1. Удаление записи в базе данных для каждой комбинации пользовательских потоков
  2. Или сохранить эту информацию в файле - один файл на пользователя. Может потребоваться блокировка / разблокировка в случае, если разрешено несколько входов одним и тем же пользователем.
0 голосов
/ 27 ноября 2008

Я думаю, что где-то видел, может быть форум phpbb? в любом случае

там была таблица с идентификатором пользователя, threadid, last-read-datetime (пусть это будет userAsRead)

тогда он сравнил бы последнее сообщение, сделанное в этой теме, с последним чтением-датой

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

не забудьте очистить userAsRead, если используется «пометить как все прочитанное», сэкономит место в БД

...