Как правильно реализовать систему уведомлений?
Добрый день!
Мне необходимо реализовать систему уведомлений пользователей в личном кабинете. Например, за неделю до окончания средств на счету, в личном кабинете пользователя (на сайте) должно появляться уведомление об этом. Если он закрыл уведомление, то больше его не показывать. Ну и любые другие события, требующие внимания пользователя дублировать уведомлениями.
Подскажите, есть ли какая-то общепринятая схема реализации таких уведомлений?
Сейчас у меня в голове только такая схема:
Создаем таблицу в базе данных:
- id записи
- id пользователя (если 0, значит, для всех пользователей)
- Текст уведомления
- Дата, когда уведомление должно появиться
- Отметка о прочтении
- Список пользователей, прочитавших общее уведомление (если id пользователя = 0)
И, соответственно, при открытии личного кабинета, делаем выборку по пользователю, непрочитанным и дате раньше или текущей дате. Ну и кешировать результат для конкретного пользователя, например, на 12 часов.
Тут мне не нравится как реализовано уведомление всех пользователей об одном и том же. Если пользователей будет около ста (а, может, и больше), то поле со списком прочитавших будет очень сильно разрастаться…
Поэтому прошу совета, подсказки, направления на путь истинный)))
Комментарии: 2
Все правильно, только что бы поле не разрасталось, выводи данные о прочтении во вторую таблицу:
-id записи
-id сообщения
-id пользователя, который прочитал
-дата прочтения
Соответственно выбирать непрочитанные сообщения будешь по 2 таблицам.
-id записи
-id сообщения
-id пользователя, который прочитал
-дата прочтения
Соответственно выбирать непрочитанные сообщения будешь по 2 таблицам.
Я тоже за вторую таблицу.
Выбирать потом проще одним запросом через leftJoin. Используй pdoTools и кеширование не понадобится.
Выбирать потом проще одним запросом через leftJoin. Используй pdoTools и кеширование не понадобится.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.