如果用sql语句来写group by 再count,这样的sql太容易 了。但由于现在都是在用框架,反而这类sql变得难写了。最近在折腾一个用TP 3框架写的代码,原来代码里写的是:
$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)一下,但如果数据量过大。这样会崩溃 的。
最终用这样的方法解决了:
$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的啦 ~

评论 (0)
暂无评论