Вопрос № 164077: Здравствуйте. Я начинающий программист на PHP. Проблема у меня такая: я написал простенький форум, но не знаю как сделать индикацию того, что в теме есть новые сообщения. Поясню: один пользователь написал сообщение, а второй, не заходя в тему, мог ср...
Вопрос № 164.077
Здравствуйте. Я начинающий программист на PHP. Проблема у меня такая: я написал простенький форум, но не знаю как сделать индикацию того, что в теме есть новые сообщения. Поясню: один пользователь написал сообщение, а второй, не заходя в тему, мог сразу определить, что там есть сообщения, которых он еще не читал. И желательна индикация числа непрочитанных сообщений и последнего человека, написавшего сообщение. Спасибо.
Отвечает: Товарищ Бородин
Здравствуйте, Krutozavrasky! Ваши сообщения, очевидно, хранятся в БД - если так, то не лишним будет добавить в таблицу поле типа DATETIME или TIMESTAMP, в котором хранится дата и время чтения письма пользователем. До прочтения письма в поле лучше всего выставить нулевое значение. Определять становится очень легко - достаточно проверить таблицу на предмет наличия строк с полем(не знаю, как Вы его назовете, а я бы его назвал как-нибудь "reading_date") reading_date = 0. Сколько таких строк находится
в таблице для соответствующего пользователя - столько сообщений у него и непрочитано. Надеюсь, объяснил понятно.
С уважением, Товарищ Бородин
Ответ отправил: Товарищ Бородин (статус: Профессор) Россия, Новосибирск Тел.: +7-923-245-3366 ---- Ответ отправлен: 04.04.2009, 08:27
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 246770 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5 Комментарий оценки: Попробую сделать со сравнением дат.
Отвечает: Волков Алексей
Здравствуйте, Krutozavrasky! поправочка к ответу ув. тов. Бородина: его метод годится только для личных сообщений. Для вашей цели я бы создал отдельную таблицу: message_id | user_id | read_time и для каждого юзер_ид определял бы число непрочитанных разницей между общим числом сообщений и числом прочитанных данным юзером из этой таблицы. Кстати, эту разницу можно получить одним запросом к базе типа SELECT * FROM messages WHERE message_id NOT IN (SELECT message_id FROM read_messages WHERE user_id='$user_id')
- этим запросом Вы получите не только число, но и список непрочитанных сообщений. Удачи!
--------- Всё, что есть хорошего в жизни - либо незаконно, либо аморально, либо ведёт к ожирению...
Ответ отправил: Волков Алексей (статус: 3-й класс)
Ответ отправлен: 04.04.2009, 15:49
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 246790 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 4
Отвечает: Rok-set
Здравствуйте, Krutozavrasky! лично для меня как вариант лучшего соотношения загруженности БД к качеству сервиса - это таблица вида userID/sectionID/timestamp При заходе пользователем впервые в тему в этой таблице появляется строчка с временем. При повторном заходе на форум происходит запрос вида (найти строку в таблице с ID темы и ID пользователя), если строка не найдена значит тема создана после последнего посещения пользователем форума. если найдена - сверяем дату последнего сообщения в теме с датой в
таблице и обновляем время. Таблица получается размером менее чем user_id*section_id потому что неактивные пользователи не делают в ней записей
Ответ отправил: Rok-set (статус: Студент)
Ответ отправлен: 06.04.2009, 09:17
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 246898 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.