我的SQL查询有问题。我想为用户显示最后一条消息。所以,我使用了"GROUP“方法,但是他没有显示最后一条消息。
这是我的第一个查询:
SELECT `messages`.*, `conversations`.*
FROM `messages` JOIN `conversations` ON `conversations`.`cNUM` = `messages`.`mCONV_NUM`
WHERE `cUSER2` = '2'
GROUP BY `messages`.`mCONV_NUMn`我试着遵循这个主题:ORDER BY date and time BEFORE GROUP BY name in mysql (和很多其他的)
和我有一个:
SELECT `messages`.*, `conversations`.*
FROM (SELECT mTIME
FROM `messages`
ORDER BY mTIME desc) AS M
JOIN `conversations` ON `conversations`.`cNUM` = `messages`.`mCONV_NUM`
WHERE `cUSER2` = '2'
GROUP BY `messages`.`mCONV_NUMn`我有一个错误:表‘消息’未知。
所以..。我需要你的帮助,伙计们
发布于 2018-01-18 14:42:58
你说你想要用户的最后一条消息,但似乎你真的想要几条消息,也就是他们参加的每一次对话的最后一条消息。
由于CROSS APPLY和MySQL中缺少窗口函数,您需要进行大量查找才能获得每次会话的最后一条消息:
select *
from conversations c
join messages m on m.mconv_num = c.cnum
where c.cuser2 = 2
and not exists
(
select *
from messages m2
where m2.mconv_num = m.mconv_num
and m2.mtime > m.mtime
);发布于 2018-01-18 14:31:33
您为您的messages表提供了一个别名M,正如艾萨雷斯所说的,您将在查询的其余部分中将其称为“M”,因为这个临时名称将持续整个查询过程,而FROM是查询处理的初始阶段。
我们讨论的是名为https://blog.sqlauthority.com/2009/04/06/sql-server-logical-query-processing-phases-order-of-statement-execution/的东西,这意味着在查询FROM语句中,首先对其进行评估和处理,然后再对其余的查询进行处理。
在LQP术语中,查询将按以下顺序处理。
(当然,我遗漏了一些阶段,但你明白了)
此外,您还可以使用极限来获取用户的最后一条消息。只需在末尾加限制1即可。
发布于 2018-01-18 14:45:59
我想为用户显示最后一条消息。
您将获得最后一条使用LIMIT的用户消息
select *
from conversations c
join messages m on m.mconv_num = c.cnum
where c.cuser2 = 2
order by m.mtime
limit 1;https://stackoverflow.com/questions/48323396
复制相似问题