Давно занимает идеологический вопрос, как реализовано хранения информации о том какие темы пользователь смотрел а как нет в частности на форумах. Я вижу несколько вариантов. 1. Хранение для каждой темы списка идентификаторов пользователя которые ее смотрели. 2. Хранение для каждого пользователя списка идентификаторов тем которые смотрел он. Возможно есть еще варианты, я не очень пока хорошо знаком с MySQL возможно есть решения позволяющие делать это более цивилизованно но для обоих вариантов я вижу тока два вида реализации 1. Поле в которое записывается куча идентификаторов разделенных между собой (на мой взгляд решение треш по многим причинам) 2. Создание отдельной таблицы для темы/пользователя куда заносятся все пользователи/темы ее просмотревшие (вроде лучше но такая куча таблиц и опять же не факт что верное решение) В данном вопросе не интересует код, интересует имено логическое решение наиболее оптимального варианта. На данный момент решения подобной задачи не стоит, просто мысль давно занимает, как это делается.
Всё очень просто: Таблица пользователей Таблица тем Таблица просмотров (id пользователя, id темы, время просмотра)
То есть получается, одна таблица в которой собраны все записи о просмотре всеми пользователями всех тем так ? (ну пока не будем говорить о возможности разбить таблицу на несколько мелких по каки то критериям) И тогда допустим когда тема обновилась то в таблице просмотров во всех строках с идентификатором изменившийся темы мы меняем дату просмотра пользователями на скажем 0 .. и таким образом когда пользователь заходит на форум мы просто проверяем в таблице просмотров для каких тем с его идентификатором дата просмотра 0 и получаем список тем в которых были изменения. Что то типа того ? Но в даном случае если таблица одна и тем на форуме 100 000 и пользователей 100 000 то только эта таблица будет иметь 100 000 х 100 000 строк в идеале, если все пользователи смотрели все темы. Такие размеры вообще нормально или же при расчете на такие размеры надо заранее проектировать базу так что бы таблица просмотров была разбита на ряд более мелких ?
Я думаю все еще проще, 1. Список пользователей просмотревших топик вести просто не зачем, Просмотренные темы хранятся в "куки". 2. Количество простмотров это простой int counter. вот и вся загадка.
BMWSauber Вариант конечно но в реалии обрати внимание, когда заходишь на форум с двух разных машин, например дома и на работе он помнит что ты смотрел а что нет, то есть данные о просмотре хранятся где то там и это более удобно для пользователя, то есть хранение подобных данных локально уже прошлое, в то время когда у людей по 5 компов по 10 ноутбуков и по 100 нетбуков а уж про телефоны и смартфоны вообще молчу. Таким образом в настоящее время хранение данных локально по меньшей мере не удобно для пользователя. Но вообще tommyangelo на мо взгляд изначально сказал верный корень, дальше уже вопрос более детальной продумки базы для ускорения процесса.
ну... на пример к Этому форуму это не относится. т.е. сейчас же захожу с другого компа и все сообщения отмечены как непрочитаные, Проверь сам, зайди другим браузером.
BMWSauber Это у тебя так - я с разных компов и соответственно с разных браузеров захожу сюда - и всё корректно отображается.
Ооо, пришел BMWSauber и предложил решение проблемы, над которой думали небезызвестные люди в области IT. Обожаю самонадеянность, ммм.
Есть же тема гдето здесь на кучу страниц и многа букав. Лично у меня сделано без доп. таблиц и без куков. Запоминает непросмотренные топы и с головой хватает реализации в десяк-второй строк.