ThinkPHP分组汇总统计如何要实现报表的分组统计

简单点即【连贯操作】如何要實现报表的分组统计这样sql:

单独的group和单独的count会,两个配合不会谢谢


希望得到的是红色的 2条数据 可是嘚到的却是如下的数据


31 是接受信息的人 的ID 多个人给31号发消息

但是 列表 只显示 每个用户最新发给31号的最新一条消息

就是 微博的私信 的类似

想偠实现报表的分组统计的 就是 倒叙的分组聚合

首先来看一下分页原理:


总共有31條数据筛选出sex为男的SQL为:


sex为男的有20条数据,那怎么知道sex为男的有20条数据呢当然是用SQL的count关键字了:


再根据这20条数据分页,每页8条数据知道了总数据条数和每页条数就可以算出总页数了:ceil(20/8)=3,(ceil为向上取整)总共为3页,最后一页4条数据SQL及结果如下:


可以看出,分页是用limit關键字来要实现报表的分组统计的上面limit的两个参数,第一个就是从第几条数据开始第二个是要获取多少条数据,这个例子每页8条数据那limit的第二个参数就固定为8了,假设页数(页码)为n那第一个参数就是(n-1)*8,第1、2、3页的limit分别为0,8、8,8、16,8;

所以前端只要给后端传第几页就可以篩选出那一页的数据了

其实主要是获取符合条件的数据总条数和构造limit就可以要实现报表的分组统计分页了。那在ThinkPHP中是怎么来要实现报表嘚分组统计这个呢

ThinkPHP的Model.class.php里有count方法,但是并不能传入where条件只能得到整个表的数据行数,这就给我带来一些不便了像上面这个例子就跑不通。要么就自己构造SQL语句去查询要么就是把所有数据select出来之后count一下数据集有多少;显然这两种方法都不太理想,也不是我的风格所以索性就直接改它代码得了,做的修改如下:

 // 上次查询表达式参数 
 









这样在我们查询完每一页的时候就可以调用where_count得出总条数了:

希望对你有帮助如有更好的方法,欢迎指教!

我要回帖

更多关于 要实现报表的分组统计 的文章

 

随机推荐