ThinkPHP获取group by使用方法

www.111cn.net 更新:2016-01-14 编辑:xiewen 来源:转载
group by不是thinkphp的专利了而且mysql数据库的一个命令了,group by意思是分组了,我们可以使用group by来对数据进行分组,下面一起来看看。

使用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_count_mysql

结果是根据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

相关内容

    暂无与此文章相关内容