Как форумы показывают Вам непрочитанные темы?

У меня есть пользовательские дискуссионные форумы, которые я кодировал в php/mysql, я желаю знать, как известные форумы могут заставить его показать Вам, какие темы имеют новые сообщения в них, обычно путем изменения изображения значка рядом с потоком, не используя едва ресурсов?

8
задан JasonDavis 4 January 2010 в 03:40
поделиться

5 ответов

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

Это вызывает некоторые проблемы, поскольку при выходе из системы все элементы помечаются как прочитанные.

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

user_id   thread_id   post_id
      1           5        15
      1           6        19

С этой информацией, если в ветке №5 есть сообщение с идентификатором больше 15, значит, вы знаете, что там есть непрочитанные сообщения. Обновите эту таблицу только с помощью post_id последнего сообщения на этой странице . Это означает, что если есть 3 страницы с новыми сообщениями, а пользователь просматривает только первую, он все равно будет знать, что есть непрочитанные сообщения.

7
ответ дан 5 December 2019 в 21:19
поделиться

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

Структура таблицы будет что-то вроде

forum_id thread_id user_id

С опциональным дополнительным has_read_id для вашего первичного ключа, с другими полями, составляющими составной ключ.

.
0
ответ дан 5 December 2019 в 21:19
поделиться

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

Конечно, существует множество способов снять шкуру с кошки, и в зависимости от того, что хотели создать создатели форума, вышеизложенное можно изменить в соответствии с

DC

.
0
ответ дан 5 December 2019 в 21:19
поделиться

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

0
ответ дан 5 December 2019 в 21:19
поделиться

Вы можете создать специальную таблицу в своей базе данных с такими столбцами, как USER_ID и THREAD_ID, и с соответствующими ограничениями для ваших таблиц USER и THREAD, а также с первичным ключом, содержащим идентификаторы USER и THREAD ID.

Теперь, когда кто-то открывает поток, вы просто вставляете эту USER-THREAD-PAIR в эту специальную таблицу.

В списках потоков теперь вы можете просто присоединить эту таблицу к тому, что вам подходит. если ваша новая таблица содержит NULL в каком-либо конкретном месте, этот поток не прочитан. Это включит такие списки, как:

  • Все потоки с маркером «непрочитанные»
  • Все непрочитанные потоки
  • Потоки, прочитанные пользователем XY

Если вы добавите столбец даты в эту таблицу, вы сможете делать еще более интересные вещи .

Просто следите за своими ключами и индексами, чтобы предотвратить слишком сильное негативное влияние на производительность. Попытайтесь читать из таблицы USER-THREAD, только присоединив ее к существующим запросам. Это будет работать намного быстрее, чем постоянное выполнение отдельных запросов.

0
ответ дан 5 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

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