需要MySQL查询消息功能,首先显示最新消息(已发送或已接收),按用户分组

需要MySQL查询消息功能,首先显示最新消息(已发送或已接收),按用户分组,mysql,Mysql,我试图在PHP/MySQL中为消息传递系统创建对话概述页面。基本上,它看起来像iPhone的文本/短信概述页面。由您从中发送或接收消息的其他用户分组的消息。它应该首先显示最新消息(发送或接收)的对话(降序) 棘手的问题。尝试以下解决方案 SELECT id,sender_id,receiver_id, CASE WHEN sender_id >= receiver_id THEN CONCAT(CAST(sender_id AS CHAR),'|', CAST(receiver_id

我试图在PHP/MySQL中为消息传递系统创建对话概述页面。基本上,它看起来像iPhone的文本/短信概述页面。由您从中发送或接收消息的其他用户分组的消息。它应该首先显示最新消息(发送或接收)的对话(降序)


棘手的问题。尝试以下解决方案

SELECT id,sender_id,receiver_id,
CASE WHEN sender_id >= receiver_id THEN 
  CONCAT(CAST(sender_id AS CHAR),'|', CAST(receiver_id AS CHAR))
ELSE
  CONCAT(CAST(receiver_id AS CHAR),'|' CAST(sender_id AS CHAR))
END AS participants ,
`datetime`,message from messages 
ORDER BY participants,`datetime`

这样,您就有了一个额外的计算字段,该字段表示发送方id-接收方id关系,您需要将两者的组合作为一个实体。按计算字段排序可能会在某一点上变慢。您可能想考虑在表中创建一个实际的额外字段来存储参与者信息。

到目前为止您尝试过什么吗?是的,我有。我遇到的问题是将发送方id和接收方id分组为同一字段。CONCAT()不起作用。
SELECT id,sender_id,receiver_id,
CASE WHEN sender_id >= receiver_id THEN 
  CONCAT(CAST(sender_id AS CHAR),'|', CAST(receiver_id AS CHAR))
ELSE
  CONCAT(CAST(receiver_id AS CHAR),'|' CAST(sender_id AS CHAR))
END AS participants ,
`datetime`,message from messages 
ORDER BY participants,`datetime`