Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод новых сообщений
 
 автор: Лена   (14.10.2010 в 17:13)   письмо автору
 
 

Задача - сделать вывод новых сообщений в мессенджере. Мессенджер доступен только для авторизованных пользователей.
Например.
Зашел пользователь на сайт.
Авторизовался, зашел в аккаунт.
Открыл мессенджер.
Увидел те сообщения, которые пришли ему, когда его не было на сайте. Или увидел те, которые пришли ему, пока он ходил по другим страницам сайта.

Время авторизации пишется в базу, пользователь запоминается в сессии.
Есть таблица sessions, структура:
id - идентификатор сессии
user_id - ид юзера при авторизации, если гость - user_id=0
date - время

По идее надо сравнивать время, когда было отправлено сообщение, со временем, когда пользователь был последний раз.
Но, чтобы зайти в мессенджер, пользователь только что авторизовался. Здесь по движку время его последнего посещения в таблице сессий == времени его авторизации. Получается мне надо время, когда пользователь был на сайте ПРЕДПОСЛЕДНИЙ раз.
Может, как-то по-другому отмечать непросмотренные сообщения? Например, сделать в таблице доп. поле - 1-просмотрел, 0-не просмотрел и обновлять его, как только пользователь просмотрел сообщение?
Есть еще вариант - как только пользователь зашел в мессенджер, ставить ему куку, в которую писать время.

  Ответить  
 
 автор: Trianon   (14.10.2010 в 17:20)   письмо автору
 
   для: Лена   (14.10.2010 в 17:13)
 

>По идее надо сравнивать время, когда было отправлено сообщение, со временем, когда пользователь был последний раз.

По идее надо метить сообщения прочтенными / непрочтенными.
Или на худой конец показанными / непоказанными.
И не увлекаться таймштампами.
На этом форуме ластриды по таймштампам расставлены, и в результате частенько кучка нечитанных тем гибнет. А читанные наоборот на глаза лезут, как мухи на...

  Ответить  
 
 автор: neadekvat   (14.10.2010 в 19:09)   письмо автору
 
   для: Trianon   (14.10.2010 в 17:20)
 

Для личных сообщений идея понятна (и любой другой вариант будет неверным, по-моему).

Однако как быть с форумом? Пусть на форуме 100 тем и 100 зарегистрированных пользователей. Это значит, что в базе надо хранить 10 000 записей о том, кто и какую тему посмотрел/не посмотрел, притом обновлять большую кучу записей при добавлении нового поста в некую тему.

Или я как-то не так понимаю идею?

  Ответить  
 
 автор: Trianon   (14.10.2010 в 19:22)   письмо автору
 
   для: neadekvat   (14.10.2010 в 19:09)
 

>Это значит, что в базе надо хранить 10 000 записей
Ну да. Жить вообще тижыло.

>о том, кто и какую тему посмотрел/не посмотрел,
кто какую тему на каком посте смотреть закончил.

>притом обновлять большую кучу записей при добавлении нового поста в некую тему.
зачем?

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

  Ответить  
 
 автор: heed   (14.10.2010 в 19:33)   письмо автору
 
   для: Trianon   (14.10.2010 в 17:20)
 

> ластриды по таймштампам расставлены, и в результате частенько кучка нечитанных тем гибнет
создавать к каждому пользователю массив непрочитанных номеров тоже слишком затратно, как и прочитанных (чуть менее). Хотя немного разгружаемо отсечением намного более старых записей.
Но всётаки это уже массивы, (если посмотреть в отрыве от темы топика , где именно [u]личные[/u] сообщения).
Касательно форума проблема ,как мне кажется, неразрешима. Пусть пользователь посмотрел сегодня 20 тем, вчера столько-же других и этих-же необновившихся, позавчера, ..... и так пару лет на несколько сотен пользователей.
Где хранить, и как с чем сличать просматриваемость, не шибко решается средствами php/mysql. потолок более-менее рентабельных возможностей, как мне кажется мониторинг ограниченного количества прочитанного за последнее время и отнесение всего остального к непрочитанному.
Пользователи должны смириться и привыкнуть :)

  Ответить  
 
 автор: Trianon   (14.10.2010 в 19:40)   письмо автору
 
   для: heed   (14.10.2010 в 19:33)
 

>> ластриды по таймштампам расставлены, и в результате частенько кучка нечитанных тем гибнет
>создавать к каждому пользователю массив непрочитанных номеров тоже слишком затратно, как и прочитанных (чуть менее). Хотя немного разгружаемо отсечением намного более старых записей.
Речь не идет о множествах постов. Это и вправду малореально.
Только о множествах тем.
Впрочем, эта тема поднималась неоднократно, без особого эффекта, и смысл очередной раз мусолить одно и тоже я как-то не вижу.

  Ответить  
 
 автор: heed   (14.10.2010 в 21:03)   письмо автору
 
   для: Trianon   (14.10.2010 в 19:40)
 

> без особого эффекта

лично для меня эффект получился в том что призадумало :) выводы для себя пока такие что колличество новых/неновых сообщений можно и на клиентской стороне высчитывать из cookies.
Однако такая привязанность как здесь , на серверной стороне, ответов к конкретным постам даёт возможность уведомлять пользователя о ответах на конкретно его посты, хотя пока не решил делать-ли всётаки (в похожей ситуации) такую привязку и извлечение из этого дополнительных данных, лишне возможности -лишние затраты (схожая с обсуждаемой ситуация), да и нет чёткого разграничения ответов вообще и ответов конкретно на сообщение.

  Ответить  
 
 автор: Лена   (15.10.2010 в 00:00)   письмо автору
 
   для: Trianon   (14.10.2010 в 17:20)
 

Спасибо, сделала прочтенные-непрочтенные отдельным полем.

  Ответить  
 
 автор: psychomc   (14.10.2010 в 18:50)   письмо автору
 
   для: Лена   (14.10.2010 в 17:13)
 

>Может, как-то по-другому отмечать непросмотренные сообщения? Например, сделать в таблице доп. поле - 1-просмотрел, 0-не просмотрел и обновлять его, как только пользователь просмотрел сообщение?

само собой

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования