Обработка прочитанных / непрочитанных сообщений для пользователей, таких как почта в mysql - PullRequest
1 голос
/ 05 июля 2011

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

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

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

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

EDIT: Я пытался обратиться к 3-му действию косвенно. я добавляю этот целочисленный столбец в список выбранных столбцов и нахожу статус чтения для пользователя в коде приложения вместо добавления в качестве критерия mysql. В любом случае это не решение проблемы. Мне все еще нужен хороший.

1 Ответ

0 голосов
/ 05 июля 2011

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

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

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

...