按用户获取未读消息

时间:2008-09-16 20:32:11

标签: sql mysql database

我想维护一个全局消息列表,这些消息将显示给Web应用程序的所有用户。我希望每个用户能够将这些消息标记为单独阅读。我创建了2个表; messages (id, body)messages_read (user_id, message_id)

您能提供一个sql语句,为单个用户选择未读消息吗?或者你有什么建议可以更好地处理这个问题吗?

谢谢!

3 个答案:

答案 0 :(得分:5)

好吧,你可以用

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

在哪里?由您的应用传入。

答案 1 :(得分:1)

如果您提到的表格定义已完成,您可能希望为每封邮件添加日期,以便按日期订购。

此外,这可能是一种更有效的方式来进行选择:

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

答案 2 :(得分:0)

类似的东西:

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 

稍微有点棘手,我不确定性能如何扩展,但它应该有效。