如图所示,我有一个聊天表。我想像 facebook 风格一样对聊天列表进行分组。
此处用户 2 已登录,并使用以下方式选择了他的对话
SELECT *
FROM `chat` `t`
WHERE `from` =2
OR `to` =2
ORDER BY sent DESC
但在这里我想要 2 和任何其他用户之间的最新单个条目。其中 2 可以在 from 或 to 列中。作为最终结果,它应该分别返回 2 个 id 为 25 和 17 的条目。
SELECT * , (
r.from + r.to
) AS dist
FROM (
SELECT *
FROM `cometchat` t
WHERE (
t.from =2
OR t.to =2
)
ORDER BY t.sent DESC
)r
GROUP BY dist
ORDER BY r.sent DESC
试试这个
SELECT *
FROM `chat` `t`
WHERE id IN (SELECT MAX(s.id) FROM chat s WHERE s.`from` =2
OR s.`to` =2 GROUP BY (IF(s.`from`=2, s.`to`, s.`from`)))
ORDER BY sent DESC