技术饭
mysql查询语句group by 后面 order by 失效
原始需求是要查询出通过手机号最新报名的数据并且需要对手机号进行分组,但是在查询过程中发现mysql查询语句group by 后面 order by 失效,无论怎么查询都是未查到需要的数据,单独查询数据排序没有问题,但是加入 GROUP BY 之后就不行了,后来的解决方案是:使用子查询的方式先查出排序好的数据,然后再将数据进行分组排序。
1、查询所有数据
1)、查询语句:SELECT * FROM `activity_signup` WHERE activity_id IN(41,102,125,140,142,146) ORDER BY id DESC;
2)、查询结果:
2、查询分页并且通过手机号进行分组
1)、查询语句:SELECT * FROM `activity_signup` WHERE activity_id IN(41,102,125,140,142,146) GROUP BY mobile ORDER BY id DESC LIMIT 0,15;
2)、查询结果:
这个查询结果并没有查出281这条数据,也就是说加了 GROUP BY 之后 order by 失效了
3、使用子查询先查询出排序分页数据,然后在进行分组跟排序
1)、查询语句:SELECT * FROM (SELECT * FROM `activity_signup` WHERE activity_id IN(41,102,125,140,142,146) ORDER BY id DESC LIMIT 0,15) b GROUP BY mobile ORDER BY id DESC;
2)、查询结果:
4、ThinkPHP5.1的查询方法就是使用子查询就好了
$subQuery = \Db::name('activity_signup')->field('id,user_id,activity_id,name,mobile,email,create_time')->where($where)->order('id desc')->page($page, $limit)->buildSql();
$data = \Db::table($subQuery . ' a')->order('id desc')->group('mobile')->select();
参考:https://blog.csdn.net/qq_41129811/article/details/103816390
参考:https://blog.csdn.net/weixin_39218464/article/details/105578641
文明上网理性发言!