Обработка прочитанных / непрочитанных сообщений для пользователей, таких как почта в mysql

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

Теперь я хотел бы назначить константу для всех пользователей, скажем, Пользователь A - 1, Пользователь B-2, Пользователь C-4 и Пользователь D-8 (побитовый), и сохранить его комбинацию в целочисленном столбце. Так что, когда пользователь A,C прочитать значение для целочисленного столбца будет (1+4) 5. И использовать побитовый оператор в критериях для запроса прочитанного / непрочитанного сообщения. Проблема в том, нет. количество пользователей, которые я могу хранить как комбинацию, ограничено, например, 62 статусом пользователя в столбце. Если мне нужно расширить, я мог бы добавить еще один столбец BIGINT для хранения других пользователей.

Что может быть лучшим способом хранения этой информации. Ниже приведены действия, которые мне нужно сделать.

  1. когда публикуется новый ответ, мне нужно обновить значение как 0 (чтобы сделать непрочитанным для каждого).
  2. Обновите статус в столбце, когда пользователь читает сообщение.
  3. Выберите все непрочитанные сообщения для пользователя.

РЕДАКТИРОВАТЬ: Я пытался обратиться к 3-й акции косвенно я добавляю этот целочисленный столбец в список выбранных столбцов и нахожу статус чтения для пользователя в коде приложения вместо добавления в качестве критерия mysql. В любом случае это не решение проблемы. Мне все еще нужен хороший.

1 ответ

Я бы просто сделал это так, создав таблицу следующим образом:

CREATE TABLE views(
    user_id bigint not null,
    post_id bigint not null,
    primary key(user_id,post_id
)

а затем просто проверьте, существует ли запись с идентификатором пользователя и идентификатором записи. Вы также можете использовать это для подсчета количества просмотров.

Другие вопросы по тегам