mysql中GROUP BY 和ORDER BY 组合使用注意事项

作者:袖梨 2022-11-14

例子

ID uid content weid addtime
1 2 3213123 12 …..
2 3 3213123 12 ….
3 2 321312 12 …
3 1 xxx 12 3232

我们的需求是从消息表中掉出来最近的用户,刚开始的时候用的是这样写的

代码如下 复制代码


SELECT f . *
FROM `enet_wechat_message` AS m
LEFT JOIN `enet_wechatfans` AS f ON m.fakeid = f.openid
AND m.weid =135
AND f.weid =135
WHERE f.fakeid IS NOT NULL
GROUP BY m.fakeid
ORDER BY m.id DESC
LIMIT 10


但是这些写完之后发现不是我想要的结果,通过查资料发现MYSQL的执行顺序是

代码如下 复制代码

from… where…group by… having…. select … order by…

这样我最后的ORDER BY 是在GROUP BUY 之后才进行的排序所以数据不是我想要的

采用如下方法可以解决

代码如下 复制代码


SELECT *
FROM (

SELECT *
FROM `enet_wechat_message`
WHERE weid =135
ORDER BY `id` DESC
) `temp` www.111com.net
GROUP BY fakeid
ORDER BY `id` DESC


LIMIT 10使用子查询,先对结果集进行排序,然后在进行分组,这样就可以实现我需要最新的几个用户了。当然这个代码的业务逻辑还需要用户的个人信息,所以我最终的代码是如下的

代码如下 复制代码


SELECT f . *
FROM (

SELECT *
FROM (

SELECT *
FROM `enet_wechat_message`
WHERE weid =135
ORDER BY `id` DESC
) `temp`
GROUP BY fakeid
ORDER BY `id` DESC
LIMIT 10 www.111com.net
) AS m
LEFT JOIN `enet_wechatfans` AS f ON m.fakeid = f.openid
WHERE f.fakeid IS NOT NULL
GROUP BY m.fakeid
ORDER BY m.id DESC

相关文章

精彩推荐