如果用sql语句来写group by 再count,这样的sql太容易 了。但由于现在都是在用框架,反而这类sql变得难写了。最近在折腾一个用TP 3框架写的代码,原来代码里写的是:
PHP代码
- $count = D('Album')->table(T('albums AS a'))
- ->join(T('union AS u') . ' ON u.id=a.union_id')
- ->join(T('company AS c') . ' ON c.id=a.store_id')
- ->join(T('photo AS p') . ' ON a.id=p.parent_id')
- ->field('a.*,u.name AS union_name,c.name as store_name')
- // ->field('count(a.id)')
- ->where($where)
- ->group('a.id')
- ->count();
看起来好象没有问题,但事实上。出来的结果却并不是你想要的,这个count并不是你要的count,而是每个组的条数。当然你也可以用select()来查出数据,再count($count)一下,但如果数据量过大。这样会崩溃 的。
最终用这样的方法解决了:
PHP代码
- $numsQuery = D('Album')->table(T('albums AS a'))
- ->join(T('union AS u') . ' ON u.id=a.union_id')
- ->join(T('company AS c') . ' ON c.id=a.store_id')
- ->join(T('photo AS p') . ' ON a.id=p.parent_id')
- ->field('a.*,u.name AS union_name,c.name as store_name')
- // ->field('count(a.id)')
- ->where($where)
- ->group('a.id')
- ->buildSql();
- $nums = D()->table("{$numsQuery} as t")->count();
算是曲线求国吧。
其实很多人在问这种问题了,但更多的人建议是直接写sql。我这种是不写sql的啦 ~