使用ThinkPHP获取group by总数可能并不是期望得到的结果,tp中语句如下:
$count = $this->xxx->where($where)->group($group)->count();
生成的sql语句:
SELECT count(*) FROM `xxx` WHERE ( (`biz_date` >= '20151014') AND (`biz_date` <= '20160111') ) GROUP BY biz_date
这样查出来的总数并不是这个结果集的条数.
如图:
结果是根据group by这个字段分组的每个分组总数。
那么获取结果总条数的正确的方式是:
//返回总数
if ($total) {
$sql = $this->xxx->where($where)->group($group)->buildSql();
$sql = 'select count(*) as tp_sum from' . $sql . 'as tt';
$result = $this->xxx->query($sql);
//echo $this->xxx->_sql();exit;
return $result[0]['tp_sum'];
}
也就是通过这样的sql语句来求group by的总条数:
select count(*) as tp_sum from( SELECT * FROM `xxx` WHERE ( (`biz_date` >= '20151014') AND (`biz_date` <= '20160111') ) GROUP BY biz_date )as tt
这样就OK了
group by实例
实例一
数据表:
姓名 科目 分数
张三 语文 80
张三 数学 98
张三 英语 65
李四 语文 70
李四 数学 80
李四 英语 90
期望查询结果:
姓名 语文 数学 英语
张三 80 98 65
李四 70 80 90
代码
create table testScore
(
tid int primary key identity(1,1),
tname varchar(30) null,
ttype varchar(10) null,
tscor int null
)
go
---插入数据
insert into testScore values ('张三','语文',80)
insert into testScore values ('张三','数学',98)
insert into testScore values ('张三','英语',65)
insert into testScore values ('李四','语文',70)
insert into testScore values ('李四','数学',80)
insert into testScore values ('李四','英语',90)
select tname as '姓名' ,
max(case ttype when '语文' then tscor else 0 end) '语文',
max(case ttype when '数学' then tscor else 0 end) '数学',
max(case ttype when '英语' then tscor else 0 end) '英语'
from testScore
group by tname
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级