首页 > 解决方案 > 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

标签: phpmysqlgroup-bysql-order-by

解决方案


要选择从每个用户发送给给定用户的最后一条消息 ($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

推荐阅读