作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从已向我发送消息的消息表中获取用户,但每个发件人只需要一个结果,即 creation
列的最大值,即消息创建时间
SELECT messages.from, account_images.profile, bio.user_full_name
FROM messages
INNER JOIN account_images ON account_images.uuid=messages.from
INNER JOIN bio ON bio.uuid=messages.from
WHERE messages.to='me'
GROUP BY messages.from
ORDER BY messages.creation DESC
最近创建消息的用户必须位于顶部,但使用此代码不会位于顶部。我提到php mysql Group By to get latest record, not first record但没有得到任何东西有什么帮助吗?
最佳答案
您可以将当前查询编写为...
SELECT DISTINCT messages.from, account_images.profile, bio.user_full_name
FROM messages
INNER JOIN account_images ON account_images.uuid=messages.from
INNER JOIN bio ON bio.uuid=messages.from
WHERE messages.to='me'
这会稍微更有效 - 但正如您在当前查询中注意到的那样,它不会按最新消息排序。
这是根据您的要求排序的:
SELECT messages.from, account_images.profile, bio.user_full_name
FROM messages
INNER JOIN account_images ON account_images.uuid=messages.from
INNER JOIN bio ON bio.uuid=messages.from
WHERE messages.to='me'
GROUP BY messages.from
ORDER BY MAX(messages.creation) DESC;
使用 DISTINCT 而不是聚合可以获得您想要的结果,但它既不高效也不优雅。
关于MySQL Group By 单个结果按时间排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21316726/
我是一名优秀的程序员,十分优秀!