【问题标题】:MySQL WhatsApp Chat QueryMySQL WhatsApp 聊天查询
【发布时间】:2016-08-17 12:07:57
【问题描述】:

我正在尝试重新创建一个对话列表,例如 whatsapp,其中显示与您进行对话的人的联系人姓名,以及发布消息的时间以及最后一条消息,无论它是来自您还是发布消息的联系人,换句话说,我需要始终查看联系人姓名和上次发布消息的时间以及可能由我或收件人发送的最后一条消息,我还需要带回图片users 表中的另一个用户。

用户表


 userid |  first_name  |       url          |
 ---------------------------------------------
  101   |    name1     | www.image_url1.jpg |
  102   |    name2     | www.image_url2.jpg |
  103   |    name3     | www.image_url3.jpg |
  104   |    name4     | www.image_url4.jpg |

消息表


MessageId  |  userid  | senderid | message  | timestamp |
-----------------------------------------------------------
    1      |    101   |    102   | message1 |  1234567  |
    2      |    102   |    101   | message2 |  1234578  |
    3      |    101   |    102   | message3 |  1235679  |
    4      |    103   |    101   | message4 |  1256379  |

如果我的用户 ID = 101 是来自我或联系人的最后一条消息和时间戳以及联系人用户 ID、名字和 url,我正在尝试从数据库中查询

  userid  |  first_name |        url         |  message  |  timestamp |
 ---------------------------------------------------------------------
    102   |    name2    | www.image_url2.jpg |  message3 |   1235679  |
    104   |    name4    | www.image_url4.jpg |  message4 |   1227878  |
 ----------------------------------------------------------------------

1) 我想从 users 表中提取联系人的 userid、first_name 和 url
2) 并从联系人的消息表中提取最新消息和时间戳

任何帮助都会很棒...

【问题讨论】:

  • 你应该尝试使用LIMIT
  • 我需要显示超过 1 条记录,如果有意义的话,我需要为每个对话记录一条记录。类似于 whatsapp 对话的显示方式

标签: mysql chat messaging whatsapp


【解决方案1】:

在查询末尾添加LIMIT 1,看看是否有帮助。

【讨论】:

  • 这不是答案...答案不以问号结尾
  • 否,因为限制 1 只会带回一条记录,我需要查看每个对话,但只需要查看每个对话的最后一条消息和其他用户名
  • 你是对的。我无法找到错误在哪里。也许样本数据和/或输出会有所帮助。顺便说一句,请注意 mems.userid 上的 distinct 和 group by (我相信子句中的 1 )有点多余(你应该只使用distinct,而且我不明白你为什么按 mems.url 分组(子句中的 3)。
【解决方案2】:

您必须知道两个用户之间发送/接收的最后一条消息的 ID,这样您才能获得他们之间最新消息的详细信息。您的查询没有表明这一点,这应该在您的 where 子句中。

【讨论】:

  • 我确实有一个 messageid 字段,但它是一个主键,因此每个条目都会给出一个递增的值,所以我是否应该包含另一个 messageid,它与在同一对话中发送的每条消息共享 messageid 并稍后分组那?这样的查询看起来如何?
  • 没有。使用该主键。跟踪您收到的最后一条消息的 ID,并在查询新消息时使用它,方法是告诉 MySQL 获取 ID 高于该 ID 的消息。每次获取新消息时都会这样做。你明白吗?
  • 是的,这是有道理的,但我将如何引入每个对话的首要信息?基于子查询获取顶部的 SQL 代码可能是什么?
  • Look here,“在 MySQL 上使用用户变量执行此操作”部分;您将为每条记录添加一个行号,然后您将获取行号等于 1 的记录。修改该代码,您将能够在评论中获得您所要求的内容..
  • @tricks,“顶部消息”是指两个用户之间的最后一条消息?如果是,您的初始查询应该有效。只需按降序排列并限制为 1。
猜你喜欢
  • 2019-09-14
  • 1970-01-01
  • 2021-01-16
  • 2020-07-30
  • 1970-01-01
  • 2013-06-02
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多