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

sunshine技术博客 sunshine技术博客

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

  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 组合使用注意事项
相关阅读

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

2019/10/10 17:37:20 | 谷歌SEO算法 | Google