mysql:按用户获取最后一次对话记录[重复]
Posted
技术标签:
【中文标题】mysql:按用户获取最后一次对话记录[重复]【英文标题】:mysql: Get last conversation records by user [duplicate] 【发布时间】: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() 来连接发送的不同消息。但是在分组时,顺序没有多大意义,因为分组的条目具有不同的日期,因此您必须指定是否要按不同组的最新消息或最旧消息进行分组。 【参考方案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 已经显示了我认为的年表以上是关于mysql:按用户获取最后一次对话记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章