Мини-сообщения каждому пользователю систему. Как правильно это реализовать?

Spear

почемучка
Мини-сообщения каждому пользователю систему. Как правильно это реализовать?

Здравствуйте!

Появилась такая задача: время от мремени на проекте расширяется функционал, или изменяется существующий.

Нужно пользователям об этом сообщать. Лично.

Должно выглядеть так: вы зашли (например, в блог). И где-то на странце появляется текст (на ярком фоне), мол "Новая функция: вставка видео. Для использования клацните туда-сюда".
После определенных действий (например, пользователь воспользовался этой функцией, или нажал на кнопку "скрыть" в углу сообщения) - сообщение больше ему не показывается.

Пока что есть два варианта:
1. После нажатия "скрыть" (или после определенного действия) ставится кука, блокирующая это сообщение. Неудобно т.к. при наличии сотни таких сообщений и очистки кук юзеры сойдут сума. Да и как-то несерьезно.

2. Нужно как-то в бд записывать что юзер это сообщение просмотрел.
Если сделать просто таблицу вроде interface_tips_read с полями tip_id и user_id то, опять же, уже через неделю в ней будет достаточно много записей.
Есть, конечно, "типсы" которые будут актуальны, скажем, месяц. Некоторые, же, должны будут показывтаься каждому новому пользователю.
При таком варианте через месяц в таблице будет куча бесплоезной информации .например Юзер 123 ознакомился с типсом "345" (котоырй показывается каждому зарегистрированному.

Есть вариант немного другой структуры - вместо того чтобы хранить в БД информаци о том, кто какое сообщение прочитал, хранить информацию о том, кто какое сообщение ещё Не читал.

Например таблица user_interface_tips:
user_id
tip_id
send_date (чтобы удалять те, которые старше ХХ месяцев)

При регистрации делаем что-то вроде

$interface_tips->send_single ($user_id, 23); // ну, вроде как отправляем юзеру типс номер 23.

При внедрении новой фичи тоже $interface_tips->send_mass (98);

Ну и для отобраения делаем что-то вроде $tips = $interface_tips->get_all($user_id);

Клиника?
 

Армян

Новичок
Если с куками делать то скорее да :)

Еще можно у профиля сделать одно текстовое поле в котором через заяптую хранить ид сообщений - это должно быстрее работать. хотя я наверно воспользовался бы третим вариантом :)
 

dimagolov

Новичок
реализуйте личные сообщения пользователям и рассылайте их. если нужна только массовая рассылка, то храним таблицу сообщений и таблицу связей юзер-нечитанное сообщение (FOREIGN KEY ON DELETE CASCADE). после того, как запросили и отобразили сообщения прибиваем записи для юзера. ну а даты публикации можно хранить в сообщениях, просто старые прибивать - оно каскадом будет убивать связи с юзерами.

Армян, дирол, орбит? про атомарность данных в БД забыл?
 

Армян

Новичок
dimagolov
Да забыл, но ведь по идее ему не нужен поиск по этим полям - почему бы нет?

И повторюсь - рекомендую использовать третий вариант ТСа, только модифицированный - как dimagolov и предложил :)
 
Сверху