![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Подобные темы уже всплывали. Но вот в очередной раз у меня делема: Как учитывать просмотренные темы форума..?
Т.е. пока пользователя не было на форуме, кто-то отвечал. Человек заходит и видит что есть темы где без него что-то ответили.. Заходит в темы и она помечается прочитанной.. Как такое организовать и какие вообще решения на сегодня есть? -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
В данных пользователя храниться список ID тем через запятую, по этому списку строится массив читаных тем. Установка флага читал-нечитал ставится после получения дерева тем, сравнением в цикле id-шек с этим массивом. В дополнение этому есть дата, после которой все темы считаются прочитанными. Когда массив прочитанных тем становится очень большим - он сокращается в два раза, при этом дата прочитанных сдвигается вверх.
Как-то так... ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
mark2011 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 28.6.2011 Репутация: 2 Всего: 2 |
ksnk,
Интересно, как вы это себе представляете? Мой вариант такой: у пользователя есть дата последнего посещения на форуме. Правильно? Когда он заходит следующий раз, делается опрос всех тем на форуме на предмет: есть ли сообщения с датой позже даты последнего посещения пользователя на форуме. Если такие сообщения есть, соответственно помечаем такие темы непрочитанными. |
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
mark2011, вообще-то, если добавить в конец вашего варианта вариант ksnk, то получится именно то, что вы оба, судя по всему, и имели ввиду =)
То есть, имеется некий список непрочитанных тем. Но обновляется он только при активности пользователя (а не при создании новой темы или еще чего). Темы, написанные позже даты последней активности, - непрочитанные де факто. Остается только хранить список непрочитанных тем и просто удалять из него прочитанные. Таким образом и минимум операций и минимум данных. Это сообщение отредактировал(а) Arantir - 6.3.2013, 22:33 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
У пользователя в данных хранится текстовое поле `seen_topics`/ и поле даты `past_seen_date`. -- при выборе тем из базы выполняется что-то вроде такого запроса
значение seen и будет просмотрена или нет тема. Или просто весь выбранный массив проверяется отдельным циклом. -- каждый раз, когда открывается новая, непросмотренная тема, в поле `seen_topics` добавляется ID этого топика. `seen_topics` .=','.ID ; -- если длина (текстовая) поля `seen_topics` становится больше 4к (среднепотолочное значение) - это примерно 4к/6=600 уникальных ID, делается такой запрос
Это сообщение отредактировал(а) ksnk - 7.3.2013, 08:06 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||
|
|||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Я зашёл на форум и мне показали непрочитанные темы. При этом обновилась таблица о моём последнем посещении. Я обновляю страницу и все стемы становятся прочитанными ![]() Arantir, что-то запутался... Я зашёл на сайт и должен сформироваться список непрочитанных тем. Каким образом? ksnk, так я не понял что учитывать, прочтённые или не прочтённые ![]() И опять же вопрос встаёт в нагрузке на БД -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
![]() К тому же, удаленные темы никак не сказываются на этой схеме. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
ну это самый простой вариант.. а теперь примени его например к этому форуму.. Сколько тут тем, сколько тут пользователей и какой объём эта таблица будет и скорость её обработки?
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
mark2011 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 28.6.2011 Репутация: 2 Всего: 2 |
Не-а.... Тема становится прочитанной только тогда, когда ты реально вошёл в неё, т.е. затребовал страницу типа topic.php?topic_id=1. При этом таблица обновится и тема будет считаться прочтённой. memcached? apc? eaccelerator? mysql optimize?? )) |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Количество тем, которые юзер просмотрел - конечно. Количество тем, которые юзер не видел - несчетно ![]() Причем тут скорость обработки? Выборка по ключевому полю довольно быстрая штука, конструкция in в запросе тоже не сильно тормозит. Для экономии места для хранения прочитанных тем - можно чистить темы у неактивных юзеров, оставляя им поменьше, или оставляя только `нижнюю дату`. А вообще - все познается на практике. Можно спросить у Wowa как оно сделано тут. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 14 Всего: 137 |
мне кажется так делать не стоит. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Aliance, а почему? Текстовая строка используется кк запчасть в sql запросах.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Новые темы/сообщения гарантированно непрочитанные. Новые — созданные после последней активности пользователя. Список не создается, а дополняется такими темами. При этом в списке хранятся еще и все прошлые непрочитанные немы. Прочтение темы означает удаление ее из списка непрочитанных. -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
хоть убейте, никак не могу нащупать мыль...
В общем делаю предварительное резюмирование Пользователь зашёл на сайт: - считывается дата его последнего пребывания - считываются новые сообщения ДАТА_ПОСЛЕДНЕГО_ВИЗИТА < ДАТА_СООБЩЕНИЯ - считываем данные у пользователя по форумам - синхронизируем: добавляем недостающие id форумов - изменяем дату последнего пребывания Пользователь заходит на форум: - считывается дата его последнего пребывания - считываются новые сообщения ДАТА_ПОСЛЕДНЕГО_ВИЗИТА < ДАТА_СООБЩЕНИЯ - считываем данные у пользователя по форумам - синхронизируем: добавляем недостающие id форумов + удаляется форум в который зашёл - изменяем дату последнего пребывания Так? -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Не думаю, что надо обновлять весь список при посещении каждого форума. Весь обновлять только на главной странице, а для каждого форума/раздела дополнительно проверять индивидуально, просто добавив условие с ID раздела в запрос. Ведь вдруг пользователь вообще интересуется лишь одним разделом и в другие даже не ходит.
-------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |