MySQL - 根据字段选择LEFT JOIN列的最后几行。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL - 根据字段选择LEFT JOIN列的最后几行。相关的知识,希望对你有一定的参考价值。
我正在建立一个移动聊天网络应用,我遇到了一个问题。直接进入问题,我有一个屏幕,显示所有用户的消息列表(像WhatsApp)。我想显示列表中的用户之间最后发送或接收的消息(如下图所示)。我现在的查询是从第一行提取所有用户的消息。这不是我想要的。
更多简单的细节发生了什么
如你所见 messages
表,字段 msg_from
和 msg_to
分别代表发送方和接收方。在我的数据中,消息在用户1& 8和用户1& 11之间传输。msg_message
Are you there?
同样地,对于用户1 & 11,最后要获取的记录将是记录10,它有 msg_message
Would you like to join?
. 但目前,对所有用户来说,获取的记录是第一条记录的信息 How are you?
. 我的查询应该做哪些改动才能得到想要的结果?请看下面的提琴。
这里的提琴。DB Fiddle
为了解决这个问题,我研究了很多东西。在分组时,groupBy会取非分组列的第一行(吸为msg_message),所以我们在加入时可以借助子查询来排序,就像这样。
SELECT swp_by, swp_to, msg_from, msg_to, mem_fname, mem_lname, mem_last_activity, msg_message, GREATEST(MAX(msg_time), swipes.swp_date) as msgdate, COUNT(msg_id) as msgcnt FROM swipes
LEFT JOIN
(
SELECT * FROM messages order by msg_time desc -- this is the magic, we use this subquery to order before grouping
)
messages ON
((
messages.msg_from = swipes.swp_by
AND messages.msg_to = swipes.swp_to)
OR (messages.msg_from = swipes.swp_to
AND messages.msg_to = swipes.swp_by
))
解决方案在你的摆弄中。https:/www.db-fiddle.comfxnh4jiUb8rDLFHpL2gWHrM5
我想我得到了预期的输出
以上是关于MySQL - 根据字段选择LEFT JOIN列的最后几行。的主要内容,如果未能解决你的问题,请参考以下文章
mysql left join,right join,inner join的区别