2017-04-07 79 views
0

我试图得到消息列表后如预期,通过分组from_user_idto_user_id所以他们看起来像下面的截图。只是,我的问题是他们似乎没有按照最近的顺序。订购工作不使用GROUP BY

这里展示他们如何看截图:

enter image description here

查询: 选择

select 
concat(to_user_id, from_user_id) as group_by, 
pm.* 
from personal_messages pm 
where (to_user_id = 1265) or (from_user_id = 1265) 
group by group_by 
order by id desc 

表结构:

enter image description here

+1

既然你标记Laravel,你为什么不跟口才试试? –

+0

@让PhilippeMurray我使用雄辩在我的应用程序,但使用正常的SQL查询来尝试并获得最好的结果,然后我将其转换成雄辩:) – Ben

+0

我不知道你的确切结构,但'PersonalMessage: :其中( 'to_user_id',1265) - > orWhere( 'from_user_id',1265) - >排序依据( 'created_at', '降序') - >获得();'应该做的伎俩。 –

回答

2

您需要日期值添加到查询:

select concat(to_user_id, from_user_id) as group_by, 
     max(updated_at) as max_updated_at 
from personal_messages pm 
where (to_user_id = 1265) or (from_user_id = 1265) 
group by group_by 
order by max_updated_at desc 

的日期值可以是created_atupdated_at,这取决于你的实际需求。你必须虽然使用像MAX聚合函数,因为无论这些领域出现的GROUP BY子句。

+0

你可以做'ORDER BY 2 DEC'也 –

+0

@AkshayKhale这是个人喜好的问题,我认为。我个人并不觉得这种语法可读。 –

+0

@GiorgosBetsos谢谢。我设法稍微调整以获得我想要的结果。我会把它标记为可以回答的。 – Ben

0

退房答案MySQL "Group By" and "Order By"

的问题是该组通过对被战胜了ORDER_BY订单需求。没有100%的解决方案,但这个链接会给你一些适合你的东西。