MySQL Select - 帮助从2列中选择最近的行

时间:2013-11-24 09:22:45

标签: mysql select

我有下表在用户之间存储消息:

enter image description here

我需要显示一个用户的所有最后一条消息的列表(来自所有已经联系过的用户)。

您将看到用户为1000000002&例如1000000172。我需要显示它们之间的最后一条消息,可能是第1行到第4行 - 但最后一次是4。

我已尝试过以下查询,但仍然不对:

SELECT sender_userid,receiver_userid,message,message_read,`datetime` FROM messages 
WHERE (receiver_userid='1000000172' OR sender_userid='1000000172') AND friendship_status=1 AND receiver_history=1
GROUP BY receiver_userid
ORDER BY `datetime` ASC;

我发现订单并没有得到最多的反对 - 可能是因为它在Group By之后。

还发现它对待sender_userid& receiver_userid为Group By中的不同行。我不确定如何从两者中得到最多的反感。

非常感谢

2 个答案:

答案 0 :(得分:0)

你的GROUP BY应该给你带来错误,但是MySQL只会给你垃圾代替:)

你甚至不需要一个分组,你只需要一个包含用户X的所有消息的列表,并且你想对它们进行排序,所以你已经完成了大部分的工作:

SELECT *
  FROM messages 
 WHERE (receiver_userid='1000000172' OR sender_userid='1000000172') 
   AND friendship_status=1 AND receiver_history=1
 ORDER BY `datetime` DESC;

请注意,如果你想要最新的那个,你想要降序排序!

答案 1 :(得分:0)

使用DESC代替ASC。 DESC意味着大的第一个。