php - Group by 避免 order by
问题描述
我试图通过循环列出消息,主要是 PDO 中的最后一条消息,但是我在 sql 中也有一个 group by 命令,它也不能正常工作。我正在使用 group by 来避免来自同一用户的页面中的多条消息。因此,用户应该将消息视为 DESC,但 group by 正在避免排名。
消息应列为(示例):
conversation 1: last message - from
conversation 2: last message - from
conversation 3: last message - from
每个对话都应该包含唯一的发件人姓名,并且有新消息的对话应该在顶部(DESC)
我的 sql 代码:
SELECT *
FROM pm
WHERE pm_to={$session['id']}
GROUP BY pm_from
ORDER BY id DESC
pm_table 结构是:
id - int(11) auto_increment
pm_from - int(11)
pm_to - int(11)
pm_content - text
解决方案
要选择从每个用户发送给给定用户的最后一条消息 ($session['id']),您需要:
- 获取每个对话的最新id列表
- 获取完整的消息列表
我写了一个 SQL 查询谁应该这样做。
SELECT pm.*
FROM pm
JOIN (SELECT MAX(id) AS id_pm
FROM pm
WHERE pm_to={$session['id']}
GROUP BY pm_from) DT1
ON DT1.id_pm = pm.id
ORDER BY id DESC
推荐阅读
- typescript - 自动从单一仓库中的命名空间/类型 NPM 模块导入 Typescript 命名空间
- google-chrome - 如何在第二个单选按钮上直接将 WebRTC 网络限制器部署到 Windows 计算机
- css - 通过媒体查询调整像组件一样使用的 svg 图像的大小
- android - 为什么 CoordinatorLayout 在底部留下一个边距?
- rename - 用特定单词重命名多个文件
- c++ - 在 boost::odeint 中使用 VectorXd
- r - 对列内的值进行排序
- javascript - 如何使转换流的输入和输出成为字符串
- javascript - 将 MDX 文件导入 React 组件以用作工具提示的文本
- javascript - 获取聊天错误类型错误:无法读取 null 的属性“publicKey”