百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> mysql中GROUP BY 和ORDER BY 组合使用注意事项
分享文章到:

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

发布时间:01/15 来源: 浏览: 关键词:
今天在做一个微信的在线客服系统的时候,东西需要从一个表中调最近的用户,但是这个表是一个消息记录表结构如下

例子

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.111cn.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.111cn.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

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有2人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板