手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2016年08月18日的文章

ThinkPHP group count

 如果用sql语句来写group by 再count,这样的sql太容易 了。但由于现在都是在用框架,反而这类sql变得难写了。最近在折腾一个用TP 3框架写的代码,原来代码里写的是:

PHP代码
  1. $count = D('Album')->table(T('albums AS a'))  
  2.                     ->join(T('union AS u') . ' ON u.id=a.union_id')  
  3.                     ->join(T('company AS c') . ' ON c.id=a.store_id')  
  4.                     ->join(T('photo AS p') . ' ON a.id=p.parent_id')  
  5.                     ->field('a.*,u.name AS union_name,c.name as store_name')  
  6.                     //     ->field('count(a.id)')  
  7.                     ->where($where)  
  8.                     ->group('a.id')  
  9.                     ->count();  

看起来好象没有问题,但事实上。出来的结果却并不是你想要的,这个count并不是你要的count,而是每个组的条数。当然你也可以用select()来查出数据,再count($count)一下,但如果数据量过大。这样会崩溃 的。

最终用这样的方法解决了:

PHP代码
  1. $numsQuery = D('Album')->table(T('albums AS a'))  
  2.                     ->join(T('union AS u') . ' ON u.id=a.union_id')  
  3.                     ->join(T('company AS c') . ' ON c.id=a.store_id')  
  4.                     ->join(T('photo AS p') . ' ON a.id=p.parent_id')  
  5.                     ->field('a.*,u.name AS union_name,c.name as store_name')  
  6.                     //     ->field('count(a.id)')  
  7.                     ->where($where)  
  8.                     ->group('a.id')  
  9.                     ->buildSql();  
  10. $nums = D()->table("{$numsQuery} as t")->count();  

算是曲线求国吧。

其实很多人在问这种问题了,但更多的人建议是直接写sql。我这种是不写sql的啦 ~