php - Group by 避免 order by

标签 php mysql group-by sql-order-by

我正在尝试按循环列出消息,主要作为 PDO 中的最后一条消息, 但我在 sql 中也有一个 group by 命令,但它不起作用。 我使用分组来避免页面中来自同一用户的多条消息。 因此,用户应该看到消息为 DESC,但分组依据避免了排名。

消息应列为(示例):

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']) 的最后一条消息,您需要:

  1. 获取每个对话的最新id列表
  2. 获取完整的消息列表

我已经编写了一个 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

关于php - Group by 避免 order by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53999747/

相关文章:

php - 如何防止 PHP 中的 SQL 注入(inject)?

mysql - REGEX 由子查询开始

php - 实体字段类型自定义查询参数

php - 如何更改 Opencart 中的主题布局?

php - Mysql 选择(搜索)查询项目列表

python - 在 Pandas 分组后绘制多个时间序列

MySQL:每天每条记录的分组结果

r - dplyr 函数 group_by 错误

php - 无法在 XAMPP 中安装 PHPUnit pear 包

c# - 检查表是否存在,如果不存在,则创建它