【问题标题】:Selecting data where fields matches选择字段匹配的数据
【发布时间】:2012-01-17 08:41:38
【问题描述】:

所以,我有这个表结构

+----+---------+-----------+---------+------+---------------------+
| id | to_user | from_user | message | read | sent                |
+----+---------+-----------+---------+------+---------------------+
|  1 |      2  |        1  | test    |    0 | 2012-01-11 13:20:14 |
+----+---------+-----------+---------+------+---------------------+

如您所见,我将它用于非常简单的聊天,现在我想做的是获取每个对话的列表。所以我需要找到一种从每个用户的对话中选择一个最后一条消息的方法。所以我需要类似的东西

   select * 
   from `messages` 
   where `to_user` = 2 --(this is my user id)
          and `to_user` = `from_user` 
   LIMIT 1

现在我知道LIMIT 总是会返回 1 条记录,其他逻辑可能不太好,无论如何,如果有人在这里得到我想要的,可以帮助我一点:)

【问题讨论】:

  • 如果您要进行多个“聊天”会话,我建议您修改查询以识别聊天会话。如果“from_user”正在与 2-3 人聊天,“to_user”也是如此。您如何知道从一个人到他们正在与之聊天的正确聊天会话的最新聊天元素?

标签: mysql sql


【解决方案1】:

IN() 子查询选择每行的id,在两个用户之间具有最近的sent。外部查询为从子查询返回的每个 id 选择剩余的列。

更新修复了 HAVING 子句...

SELECT * FROM table WHERE id IN (
  SELECT id FROM table GROUP BY to_user, from_user HAVING sent = MAX(sent)
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 2018-01-06
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多