北京SEO

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

2019/10/10/17:37:20  阅读:1890  来源:谷歌SEO算法  标签: Google

今天在做一个微信的在线客服系统的时候,东西需要从一个表中调最近的用户,但是这个表是一个消息记录表结构如下,例子:

  1. IDuidcontentweidaddtime
  2. 12321312312…..
  3. 23321312312….
  4. 3232131212…
  5. 31xxx123232

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

  1. SELECTf.*
  2. FROM`enet_wechat_message`ASm
  3. LEFTJOIN`enet_wechatfans`ASfONm.fakeid=f.openid
  4. ANDm.weid=135
  5. ANDf.weid=135
  6. WHEREf.fakeidISNOTNULL
  7. GROUPBYm.fakeid
  8. ORDERBYm.idDESC
  9. LIMIT10

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

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

这样我最后的ORDER BY 是在GROUP BUY 之后才进行的排序所以数据不是我想要的,采用如下方法可以解决,代码如下:

  1. SELECT*
  2. FROM(
  3. SELECT*
  4. FROM`enet_wechat_message`
  5. WHEREweid=135
  6. ORDERBY`id`DESC
  7. )`temp`www.phpfensi.com
  8. GROUPBYfakeid
  9. ORDERBY`id`DESC

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

  1. SELECTf.*
  2. FROM(
  3. SELECT*
  4. FROM(
  5. SELECT*
  6. FROM`enet_wechat_message`
  7. WHEREweid=135
  8. ORDERBY`id`DESC
  9. )`temp`
  10. GROUPBYfakeid
  11. ORDERBY`id`DESC
  12. LIMIT10www.phpfensi.com
  13. )ASm
  14. LEFTJOIN`enet_wechatfans`ASfONm.fakeid=f.openid
  15. WHEREf.fakeidISNOTNULL
  16. GROUPBYm.fakeid
  17. ORDERBYm.idDESC

广告内容

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

相关阅读

热门评论

sunshine技术博客 sunshine技术博客

sunshine技术博客

总篇数164

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法