【问题标题】:mysql: Get last conversation records by user [duplicate]mysql:按用户获取最后一次对话记录[重复]
【发布时间】:2016-10-09 17:43:00
【问题描述】:

我需要按降序获取 to_user 的最后一次对话记录。 我有一个名为消息的表。请查看以下屏幕截图:

我希望以下列方式输出:

 from_user| to_user | message         | 
  241     |  226    |   How are you?  |
  241     |  256    | Hi test message |

我试过这个查询:

SELECT * FROM `messages` where from_user=241 group by to_user order by created DESC

我得到以下错误的输出:

提前致谢。

【问题讨论】:

  • 你为什么按to_user分组?如果您这样做,您将不得不聚合您选择的字段。您可以使用 group_concat() 来连接发送的不同消息。但是在分组时,顺序没有多大意义,因为分组的条目具有不同的日期,因此您必须指定是否要按不同组的最新消息或最旧消息进行分组。

标签: mysql sql


【解决方案1】:

如果您希望 from_user 的所有帖子在一个字段中(误解了我认为的问题):

SELECT group_concat(messages.message) 
    FROM messages 
    WHERE from_user = 241 
    GROUP BY to_user 
    ORDER BY MAX(id) DESC

您必须说明您希望按照哪些标准对其进行排序。您可以拥有对话的开始或对话的最后一条消息。

【讨论】:

    【解决方案2】:
    SELECT *
    FROM
      (SELECT *
       FROM `messages`
       WHERE from_user=241
       ORDER BY created DESC) as test
    GROUP BY to_user
    

    【讨论】:

    • 应在子查询中添加 LIMIT 1 以仅返回最新条目。
    • 没有限制也没关系
    【解决方案3】:

    试试他的:

    SELECT t1.* 
    FROM `messages` AS t1
    JOIN (
       SELECT to_user, MAX(created) AS created
       FROM `messages` 
       WHERE from_user=241
       GROUP BY to_user
    ) AS t2 ON t1.to_user = t2.to_user AND t1.created = t2.created
    WHERE from_user=241
    ORDER BY t1.created DESC
    

    【讨论】:

    • 太棒了!!!像魅力一样工作。非常感谢
    • 工作正常。但是如果 to_user 发送了消息,则无法获取最后一条消息。
    【解决方案4】:

    试试这个

    SELECT * FROM `messages` where from_user=241 group by to_user order by id , created DESC
    

    【讨论】:

    • 谢谢,我需要每个 to_user 一个记录...如何实现?
    • 不需要按创建日期排序,因为 id 已经显示了我认为的年表
    猜你喜欢
    • 2012-02-12
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多