我的 SQL 查询有问题。我想为用户显示最后一条消息。所以,我使用“GROUP BY”方法,但他不显示最后一条消息。
这是我的第一个查询:
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`
我有这个错误:表“消息”未知。
所以..我需要你们的帮助
最佳答案
您为消息表指定了别名 M,正如 isaace 所说,您应在查询的其余部分中将其称为“M”,因为此临时名称在整个查询期间持续存在,并且 FROM 是查询处理的初始阶段。
<小时/>We are talking about something called logical query processing, this means that in your query FROM statement is evaluated and processed initially and then the rest of query.
在 LQP 术语中,查询将按以下顺序处理。
- 来自 --> 何处 --> 分组依据 --> 有 --> 选择 --> 排序依据
(当然我遗漏了一些阶段,但你明白了)
您还可以使用 LIMIT 来获取用户的最后一条消息。 只需在末尾添加 LIMIT 1 即可。
关于mysql - 在使用 JOIN 进行 GROUP BY 之前进行 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48323396/