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

您能否提供一个sql语句来选择单个用户的未读消息? 还是您对解决此问题有任何建议?

谢谢!

===============>>#1 票数:5

好吧,你可以使用

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

在哪 由您的应用传递。

===============>>#2 票数: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

===============>>#3 票数: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 

有点棘手,我不确定性能如何提高,但应该可以。

  ask by Kenzie translate from so

未解决问题?本站智能推荐:

2回复

在mysql中获取未读文章的数据库设计(超过100M行表)

这些信息非常简洁。 有2个表。 文章 读 我想使用以下查询获取未读文章(非常精简) 重要信息 每个用户read table行数保持在1000以下。 (删除旧数据) 文章表中的权重列经常更改。 (这意味着订单没有修复)
1回复

MySQL - 获取发送最新消息的用户

我有一个消息表,如下所示: 基本上我想要的是,我想要获取将最新消息发送到组的n用户。 因此,它必须按from_user_id分组, from_user_id id降序排序。 我有以下查询: 这个问题是,当我按user.id分组时,会考虑id字段最小的行。 因此,我得到的
2回复

查询:如何获取每一个用户对话的最新消息?

我有一个非常简单但很重要的对话表(created_by是发送消息的用户的代码)。 然后,我有一个sessions_messages表(sent_by是发送消息的用户的代码,message是我的消息文本,created_at是时间戳)。 最后,我有一个对话表,其中包含user_id(接收消息的
2回复

SQL:在给定的日期范围内获取未登录的用户

我有一个在MySQL中有两个表的场景。 表1:用户 表2:login_history 我正在尝试提出一个查询,以便在给定的时间段内,例如在2017-09-25和2017-10-2之间获取未登录的用户。 我试图使用子查询,但该查询非常慢。 在这个例子中,我给出了伪数据
2回复

在mysql中编写此查询时出现问题(在论坛中标记已读消息)

嘿。 我正在写一个论坛,并且我有此表标记特定用户阅读的消息: 消息表的简化版本: 现在,我希望能够在从数据库中检索给定论坛的消息数据时,添加一个变量,该变量将告诉我当前用户是否已阅读该消息。 我知道如何使用2个查询来执行此操作(首先我检索所有消息,然后如果用户已阅读它们则检查
1回复

MySQL获取最新的对话消息

我正在开发一个用户可以与其他用户聊天的应用(1对1,而不是群聊)。 我有一个MySQL表,用于存储来自每个用户的所有消息,例如: 如何从AND到abc123从最新到最旧的最新消息,例如: from_id to_id message time abc123 p0tat0 I m
2回复

从每个对话中获取最后一条消息

我之前曾经问过类似的问题,但是没有一个问题具有相同的条件,他们的答案对于这种情况不起作用。 包含消息的表如下所示: 并且假设我查询来自用户ID 1的每个对话的最后一条消息,预期结果是: 我尝试了许多组合,使用JOIN和子查询,但没有一个给出预期的结果。 这是我尝试的其
4回复

SQL查询仅显示特定用户的最新消息?

我有两个sql表,一个有用户,另一个有消息。 现在我的查询是: 现在返回的是所有消息的所有信息,而不管是否有formid(发件人的id)。问题是,我只想显示id中每个消息的最新消息。有点像Facebook仅向您显示最新消息那个朋友x发送了您,但不是所有消息。 用户单击好友的最新消息后
2回复

网站的两个用户之间的对话类型收件箱消息

我想实现两个用户之间的对话类型的收件箱消息,其中对话将在两个用户之间分组并显示在收件箱页面上,当单击对话时,总体聊天记录将显示在两个用户之间....数据库模式,但未能对两个用户之间的对话进行分组。我需要一个查询来实现此目的。谢谢,这是我的表。 1. 用户: ID 用户名
1回复

用户私人消息的基本数据库结构是什么样的?

我正在使用Rails 3.2(不是ruby on rails问题)并接近我一直在努力的项目的结尾。 现在我正在构建一个用户私人消息功能。 我一直在关注http://www.novawave.net/public/rails_messaging_tutorial.html#start,但有