我有下表在用户之间存储消息:
我需要显示一个用户的所有最后一条消息的列表(来自所有已经联系过的用户)。
您将看到用户为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中的不同行。我不确定如何从两者中得到最多的反感。
非常感谢
答案 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意味着大的第一个。