|
|
|
| Задача - сделать вывод новых сообщений в мессенджере. Мессенджер доступен только для авторизованных пользователей.
Например.
Зашел пользователь на сайт.
Авторизовался, зашел в аккаунт.
Открыл мессенджер.
Увидел те сообщения, которые пришли ему, когда его не было на сайте. Или увидел те, которые пришли ему, пока он ходил по другим страницам сайта.
Время авторизации пишется в базу, пользователь запоминается в сессии.
Есть таблица sessions, структура:
id - идентификатор сессии
user_id - ид юзера при авторизации, если гость - user_id=0
date - время
По идее надо сравнивать время, когда было отправлено сообщение, со временем, когда пользователь был последний раз.
Но, чтобы зайти в мессенджер, пользователь только что авторизовался. Здесь по движку время его последнего посещения в таблице сессий == времени его авторизации. Получается мне надо время, когда пользователь был на сайте ПРЕДПОСЛЕДНИЙ раз.
Может, как-то по-другому отмечать непросмотренные сообщения? Например, сделать в таблице доп. поле - 1-просмотрел, 0-не просмотрел и обновлять его, как только пользователь просмотрел сообщение?
Есть еще вариант - как только пользователь зашел в мессенджер, ставить ему куку, в которую писать время. | |
|
|
|
|
|
|
|
для: Лена
(14.10.2010 в 17:13)
| | >По идее надо сравнивать время, когда было отправлено сообщение, со временем, когда пользователь был последний раз.
По идее надо метить сообщения прочтенными / непрочтенными.
Или на худой конец показанными / непоказанными.
И не увлекаться таймштампами.
На этом форуме ластриды по таймштампам расставлены, и в результате частенько кучка нечитанных тем гибнет. А читанные наоборот на глаза лезут, как мухи на... | |
|
|
|
|
|
|
|
для: Trianon
(14.10.2010 в 17:20)
| | Для личных сообщений идея понятна (и любой другой вариант будет неверным, по-моему).
Однако как быть с форумом? Пусть на форуме 100 тем и 100 зарегистрированных пользователей. Это значит, что в базе надо хранить 10 000 записей о том, кто и какую тему посмотрел/не посмотрел, притом обновлять большую кучу записей при добавлении нового поста в некую тему.
Или я как-то не так понимаю идею? | |
|
|
|
|
|
|
|
для: neadekvat
(14.10.2010 в 19:09)
| | >Это значит, что в базе надо хранить 10 000 записей
Ну да. Жить вообще тижыло.
>о том, кто и какую тему посмотрел/не посмотрел,
кто какую тему на каком посте смотреть закончил.
>притом обновлять большую кучу записей при добавлении нового поста в некую тему.
зачем?
Надо только понимать, что на большинстве форумов темы создаются существенно реже, и существуют существенно дольше.
И создаются далеко не любым участником дискуссии.
Примерно как эхи/конфы в фидошке/ньюсах.
Не до такой степени, конечно, но похоже. | |
|
|
|
|
|
|
|
для: Trianon
(14.10.2010 в 17:20)
| | > ластриды по таймштампам расставлены, и в результате частенько кучка нечитанных тем гибнет
создавать к каждому пользователю массив непрочитанных номеров тоже слишком затратно, как и прочитанных (чуть менее). Хотя немного разгружаемо отсечением намного более старых записей.
Но всётаки это уже массивы, (если посмотреть в отрыве от темы топика , где именно [u]личные[/u] сообщения).
Касательно форума проблема ,как мне кажется, неразрешима. Пусть пользователь посмотрел сегодня 20 тем, вчера столько-же других и этих-же необновившихся, позавчера, ..... и так пару лет на несколько сотен пользователей.
Где хранить, и как с чем сличать просматриваемость, не шибко решается средствами php/mysql. потолок более-менее рентабельных возможностей, как мне кажется мониторинг ограниченного количества прочитанного за последнее время и отнесение всего остального к непрочитанному.
Пользователи должны смириться и привыкнуть :) | |
|
|
|
|
|
|
|
для: heed
(14.10.2010 в 19:33)
| | >> ластриды по таймштампам расставлены, и в результате частенько кучка нечитанных тем гибнет
>создавать к каждому пользователю массив непрочитанных номеров тоже слишком затратно, как и прочитанных (чуть менее). Хотя немного разгружаемо отсечением намного более старых записей.
Речь не идет о множествах постов. Это и вправду малореально.
Только о множествах тем.
Впрочем, эта тема поднималась неоднократно, без особого эффекта, и смысл очередной раз мусолить одно и тоже я как-то не вижу. | |
|
|
|
|
|
|
|
для: Trianon
(14.10.2010 в 19:40)
| | > без особого эффекта
лично для меня эффект получился в том что призадумало :) выводы для себя пока такие что колличество новых/неновых сообщений можно и на клиентской стороне высчитывать из cookies.
Однако такая привязанность как здесь , на серверной стороне, ответов к конкретным постам даёт возможность уведомлять пользователя о ответах на конкретно его посты, хотя пока не решил делать-ли всётаки (в похожей ситуации) такую привязку и извлечение из этого дополнительных данных, лишне возможности -лишние затраты (схожая с обсуждаемой ситуация), да и нет чёткого разграничения ответов вообще и ответов конкретно на сообщение. | |
|
|
|
|
|
|
|
для: Trianon
(14.10.2010 в 17:20)
| | Спасибо, сделала прочтенные-непрочтенные отдельным полем. | |
|
|
|
|
|
|
|
для: Лена
(14.10.2010 в 17:13)
| | >Может, как-то по-другому отмечать непросмотренные сообщения? Например, сделать в таблице доп. поле - 1-просмотрел, 0-не просмотрел и обновлять его, как только пользователь просмотрел сообщение?
само собой | |
|
|
|