关于mysql5.5和5.7group的区别_Yii_青云站长教程网
欢迎来到站长教程网!
  • 秒到短信接口 免费试用
  • 微信支付宝接口 秒结算
  • 中文网站排名|申请加入
  • 搜索引擎全站查询
  • 查询移动网站权重数据
  • 海外主机 台湾公司直销
  • Yii

    当前位置:主页 > 网络编程 > Yii >

    关于mysql5.5和5.7group的区别

    时间:2019-08-11|栏目:Yii|点击:
  • 工作的业务逻辑要求取出最近的登录时间,对此有两种解决方法,第一种是针对每个用户执行一次数据库查询,第二种是将一个列表中的用户登录时间一次性全部取出,再遍历数据时,进行数据整合。 第一种方法最简单,但是对数据库的压力比较大,而且很容易造成数据库连接数过大,导致数据库暂时无法连接的问题,所以我采用的是第二种查询方式,第二种查询有效的减少了数据库的操作。登录历史是一直新增的,而且需要查出不重复的最新的记录,就需要先进行数据的排序,再进行分组,但是数据库的执行顺序是先分组,再排序。所以这儿就需要进行子查询,在子查询中进行排序,之后再进行分组,这样可以解决问题代码如下(用的是YII框架就先行贴出yii代码)

    $subQuery = (new Query()) ->select(['service_id', 'ctime']) ->from(self::tableName()) ->where(['service_id' => $service_id]) ->orderBy(['service_id' => SORT_DESC, 'ctime' => SORT_DESC]); $res = (new Query()) ->from(['tmp' => $subQuery]) ->groupBy(['service_id']) ->all(self::getDb()); return $res; SELECT * FROM (SELECT service_id , ctime FROM `login_history` WHERE service_id IN ('qweqeq','qweqwe','asdasda', 'asdsasdasd') ORDER BY `service_id` DESC, `ctime` DESC) `tmp` GROUP BY `service_id`

    但是出问题了,在测试环境的mysql 5.7 中group by 的获取数据机制变了,无论怎么排序都是获取插入数据时的第一条记录,所以上面的程序就出现了bug,无法获取到相应的记录。所以在获取时做了改进,代码如下

    $subQuery = (new Query()) ->select(['DISTINCT (service_id)', 'ctime']) ->from(self::tableName()) ->where(['service_id' => $service_id]) ->orderBy(['service_id' => SORT_DESC, 'ctime' => SORT_DESC]); $res = (new Query()) ->from(['tmp' => $subQuery]) ->groupBy(['service_id']) ->all(self::getDb()); return $res; SELECT * FROM (SELECT DISTINCT (service_id) , ctime FROM `login_history` WHERE service_id IN ('dsfsfs','qweqwe','qweqe', 'wewew') ORDER BY `service_id` DESC, `ctime` DESC) `tmp` GROUP BY `service_id`

    我的理解是在子查询中distinct先获取了数据,然后group by完成了分组。

    上一篇:phing部署(记记笔记)

    栏    目:Yii

    下一篇:在CentOS上php5.6怎么安装?

    本文标题:关于mysql5.5和5.7group的区别

    本文地址:http://www.jh-floor.com/wangluobiancheng/Yii/19420.html

    广告投放 | 联系我们 | 版权申明

    重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

    如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

    联系QQ:888888 | 邮箱:888888#qq.com(#换成@)

    Copyright © 2002-2017 青云站长教程网 版权所有 琼ICP备xxxxxxxx号