![](/img/trans.png)
[英]mysql: select the last 10 messages and for each message the last 3 replies
[英]SELECT Last messages from last receiver. mysql
我的桌子
id|receiver|sender|content|time
1 | 6 | 2 | a | 13:33
2 | 4 | 3 | b | 13:35
3 | 4 | 3 | c | 14:01
4 | 5 | 3 | d | 14:03
5 | 7 | 2 | e | 14:05
6 | 4 | 3 | f | 14:07
我的預期結果:
id|receiver|sender|content|time
6 | 4 | 3 | f | 14:07
3 | 4 | 3 | c | 14:01
2 | 4 | 3 | b | 13:35
目前我的方法:
SELECT * FROM `meassages`
WHERE `sender` = 3 AND `receiver` IN (
SELECT `receiver` FROM `messages` ORDER BY `time` DESC LIMIT 1
) ORDER BY `time` DESC
有沒有更簡單的方法?
盡管您的查詢看起來不錯,但它假定最后一條消息來自sender = 3
。 因此,最好在子查詢中有一個where
:
SELECT m.*
FROM messages m
WHERE m.sender = 3 AND
m.receiver = (SELECT m2.receiver
FROM messages m2
WHERE m2.sender = m.sender
ORDER BY m2.time DESC
LIMIT 1
)
ORDER BY m.time DESC;
使用=
代替IN
強調子查詢返回一行。 另外,我添加了表別名和限定的列名。
嘗試以下方法:
SELECT m1.*
FROM `meassages` AS m1
INNER JOIN
(
SELECT receiver, MAX(time) AS LatestTime
FROM messages
group by receiver
) AS m2 ON m1.receiver = m2.receiver
AND m1.`time` = m2.LatestTime
WHERE m1.`sender` = 3;
內部查詢將為您提供每個接收者的最新時間,這應該是最后一個接收者。 然后,根據最近的時間再次加入該表,您將除去所有具有最新時間的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.