手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜Qcloud , 注册 | 登陆

ThinkPHP group count

首页 > PHP >

 如果用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的啦 ~

 

 




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):