Я пытаюсь создать систему уведомления групп. Если я нахожусь в группе, то любой, кто комментирует стену группы, отправляет уведомление каждому члену группы. Вот мой дизайн базы данных: у меня две таблицы: Notification
и NotificationRead
.
NotificationRead
+userId (String)
+lastRead (int) - default is 0
Notification
...
+time(int)
...
Каждый пользователь имеет одну запись в NotificationRead
, он отслеживает, когда я последний раз читаю свое уведомление.
Логика: для конкретного пользователя, если Notification.time > NotificationRead.lastRead
, то это уведомление считается непрочитанным. Скажем, что в group A
есть 4 уведомления, которые я не читал, а их time
- 7, 8, 9, 10
, тогда, когда я нажимаю на group A
, я устанавливаю свой NotificationRead.lastRead = 10
(наибольшее время), поэтому я не буду читать их снова. У новых уведомлений будет время время начиная с 11. Теперь вот моя проблема. Пусть говорят, что у меня 3 группы, A, B и C
A (4): наибольшее время - 10
B (1): наибольшее время - 14
C (1): наибольшее время составляет 12
если я нажимаю на A, мой NotificationRead.lastRead = 10
, 4
рядом с A clear off, 1
рядом с B и C остаются. Теперь, если я нажимаю на B, мой lastRead
теперь равен 14, поэтому он не только отключает 1
рядом с B, но также и 1
рядом с C с 14 > 12
. Может ли кто-нибудь помочь мне подумать о том, как это решить. Я открыт, чтобы полностью перепроектировать все.
Нельзя добавить столбец groupID в свою таблицу NotificationRead, чтобы вы знали значение lastRead для каждой комбинации User\Group > ?
Если вы хотите узнать последнее время уведомления для каждого пользователя на группу, вы должны сохранить эту информацию. Поэтому каждый пользователь должен иметь более одной записи в NotificationRead, которая должна стать отдельной таблицей из таблицы пользователя. Эта таблица будет содержать три столбца: user_id, group_id и последнее значение для этого пользователя/группы.
hashMap
, чтобы отобразить список непрочитанных уведомлений в список групп. ИМХО, это быстрее, чем зацикливать мой список групп и снимать запрос к базе данных. (Пожалуйста, прочитайте ниже)
Notification.time > NotificationRead.lastRead
, которые имеют смысл , поскольку lastRead
ассоциированного с уникальным userId
. Но теперь lastRead
связывается с userId and groupId
, то есть существует несколько lastRead per userId, cant do
Notification.time> NotificationRead.lastRead`