Получать непрочитанные сообщения пользователем - PullRequest
0 голосов
/ 17 сентября 2008

Я хочу вести список глобальных сообщений, которые будут отображаться всем пользователям веб-приложения. Я хочу, чтобы каждый пользователь мог пометить эти сообщения как прочитанные по отдельности. Я создал 2 таблицы; messages (id, body) и messages_read (user_id, message_id).

Можете ли вы предоставить SQL-оператор, который выбирает непрочитанные сообщения для одного пользователя? Или у вас есть предложения для лучшего способа справиться с этим?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 17 сентября 2008

Ну, вы могли бы использовать

SELECT id FROM messages m WHERE m.id NOT IN(
    SELECT message_id FROM messages_read WHERE user_id = ?)

Где? передается вашим приложением.

1 голос
/ 17 сентября 2008

Если указанные вами определения таблиц полны, вы можете указать дату каждого сообщения, чтобы вы могли упорядочить их по дате.

Кроме того, это может быть несколько более эффективный способ выбора:

SELECT id, message
FROM messages
LEFT JOIN messages_read
    ON messages_read.message_id = messages.id
    AND messages_read.[user_id] = @user_id
WHERE
    messages_read.message_id IS NULL
0 голосов
/ 17 сентября 2008

Что-то вроде:

SELECT id, body FROM messages LEFT JOIN
  (SELECT message_id FROM messages_read WHERE user_id = ?)
  ON id=message_id WHERE message_id IS NULL 

Немного сложно, и я не уверен, как производительность будет увеличиваться, но она должна работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...