按用户获取未读消息
时间:2020-03-05 18:57:06 来源:igfitidea点击:
我想维护一个全局消息列表,该列表将显示给Web应用程序的所有用户。我希望每个用户都可以将这些消息标记为单独阅读。我已经创建了2张桌子; messages(id,body)
和messages_read(user_id,message_id)
。
我们能否提供一个sql语句来为单个用户选择未读消息?或者我们对解决此问题有任何建议吗?
谢谢!
解决方案
回答
好吧,你可以使用
SELECT id FROM messages m WHERE m.id NOT IN( SELECT message_id FROM messages_read WHERE user_id = ?)
在哪里 ?由应用传递。
回答
就像是:
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
有点棘手,我不确定性能如何扩展,但是应该可以。
回答
如果我们提到的表定义是完整的,则可能要为每条消息包括一个日期,以便可以按日期对它们进行排序。
此外,这可能是执行选择的一种更有效的方法:
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