我一直在尝试从mysql中的表中获取聊天列表

这是桌子的样子

|id|sender     |receiver        |date      |
| 1|u1         |u2              |2014-06-12|
| 2|u2         |u1              |2014-06-13|
| 3|u3         |u2              |2014-06-14|
| 4|u1         |u2              |2014-06-15|
| 5|u1         |u3              |2014-06-16|


我希望查询获取u1在接收方或发送方中的所有id,但仅显示最新的id并使用日期列对查询进行排序

预期的结果是这样的

5 4


通过这种方式,它表明u1正在与u3聊天,而u1正在与u2聊天(因为u2也是第二个id中的发件人,但未显示日期)

我试图使用组和联接来创建查询,但是不可能

谢谢

最佳答案

您可以使用内部查询找到所有行,其中内部查询查找每个发件人为id的接收者的最大u1,并执行外部查询以获取行并对其进行排序;

SELECT id, date FROM mytable WHERE id IN (
 SELECT MAX(id) id
 FROM mytable
 WHERE sender='u1' OR receiver='u1'
 GROUP BY CASE WHEN sender='u1' THEN receiver ELSE sender END
)
ORDER BY date DESC;


An SQLfiddle to test with

关于php - 将两个SQL查询合并为一个不重复的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24113497/

10-13 02:55