加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql中GROUP BY 和ORDER BY 组合使用谨慎事项

发布时间:2022-06-20 14:27:26 所属栏目:MySql教程 来源:互联网
导读:今天在做一个微信的在线客服系统的时候,东西需要从一个表中调最近的用户,但是这个表是一个消息记录表结构如下,例子: ID uid content weid addtime 1 2 3213123 12 .. 3 1 xxx 12 3232 我们的需求是从消息表中掉出来最近的用户,刚开始的时候用的是这样写的,代
  今天在做一个微信的在线客服系统的时候,东西需要从一个表中调最近的用户,但是这个表是一个消息记录表结构如下,例子:
 
  ID  uid  content  weid      addtime   
  1  2  3213123  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 *  
   ORDER BY  `id` DESC
  LIMIT 10使用子查询,先对结果集进行排序,然后在进行分组,这样就可以实现我需要最新的几个用户了,当然这个代码的业务逻辑还需要用户的个人信息,所以我最终的代码是如下的:
 
  SELECT f . *  
   ORDER BY  `id` DESC  
  LIMIT 10 www.phpfensi.com
  ) 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
 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读