同时使用分组依据和按顺序进行聊天收件箱

时间:2015-02-15 08:18:43

标签: mysql

我尝试过stackoverflow的其他答案,但似乎没有什么对我有用。我有一个表名聊天(参考图片)。我想为邮件创建收件箱页面,但我无法在顶部显示最新发件人的邮件ID。但是,以下sql语句对我不起作用:

SELECT * from chat where userid='53' group by receiver order by id desc

我应该只能看到最新发件人的最新消息和ID。 相反,我看到一些随机消息和订单。

表的形象是 Image of table

不,我想创建包含所有不同发件人的收件箱。 它应该像whatsapp或facebook收件箱。我应该在顶部看到最新的消息。

3 个答案:

答案 0 :(得分:1)

这是使用left join执行此操作的方法,还有其他方法可以执行相同操作。您也可以检查http://dev.mysql.com/doc/refman/5.6/en/example-maximum-column-group-row.html

select * from chat c1
left join chat c2 on c1.userid = c2.userid
and c1.receiver = c2.receiver
and c1.id < c2.id
where c1.userid = 53 and c2.id is null
order by c1.id desc

答案 1 :(得分:0)

(编辑解释)

limit子句减少了结果中的项目数。 见MySQL guide

 [LIMIT {[offset,] row_count | row_count OFFSET offset}]

retrive 1行的最简单用法是limit 1。要获得“最后一个”,您可以反转顺序,尝试

 SELECT * 
 FROM chat 
 WHERE userid='53' 
 GROUP BY receiver 
 ORDER BY datetime 
 LIMIT 1

答案 2 :(得分:0)

使用LIMIT限制元组数

SELECT MAX(id) as mid, message from chat where userid='53' group by receiver