我有SQL:
select
sub.id,
corr
from
(
select
m.id,
m.sent_time,
(case when m.to_user = '58' then m.from_user else m.to_user end) as corr
from
messages m
where
(
from_user = '58' OR
to_user = '58'
)
order by
m.sent_time desc
) as sub
group by
sub.corr
order by
sent_time DESC
在网站的源代码中,我已经继承了。 SQL检索消息ID和与之进行通信的另一方的用户ID(已向登录用户发送消息或从该用户发送消息)(在本例中为用户ID 58。
此刻查询始终返回用户(58)与另一个用户之间的最早消息ID。 使用send_time DESC更改顺序并没有更改。
我可能缺少明显的东西-但是如何通过更改此查询来获取最新消息而不是最旧消息的消息ID?
答案 0 :(得分:1)
您的查询没有提供您想要的结果,因为一旦您使用GROUP BY
,它就会为所有未聚合的列选择随机值。我认为您可以简化查询来避免此问题:
SELECT id,
CASE WHEN to_user = '58' THEN from_user ELSE to_user END AS corr
FROM messages m
WHERE (to_user = 58 OR from_user = 58) AND
sent_time = (SELECT MAX(sent_time)
FROM messages m1
WHERE m1.to_user = 58 OR m1.from_user = 58)
答案 1 :(得分:0)
如果我了解您的意思,则可以尝试使用以下sql:
select
max(sub.id),
sub.corr
from
(
select
m.id,
m.sent_time,
(case when m.to_user = '58' then m.from_user else m.to_user end) as corr
from
messages m
where
(
from_user = '58' OR
to_user = '58'
)
order by
m.sent_time desc
) as sub
group by
sub.corr