我有一个CakePHP应用程序,我试图计算用户拥有的每种类型帖子的数量。我也使用paginate帮助器在他们的个人资料上显示所有用户的帖子
我可以:
1)对所有用户的帖子发出find('all', $conditions)
请求,然后解析我需要的计数(通过邮寄方式发送并检查它是否与我正在寻找的相匹配)。
2)进行乘法find('count', $conditions)
请求,获得我需要的所有计数
3)在创建帖子时保留用户表中的新列以跟踪这些数字(放置将涉及在发布新帖子时写入用户帐户)。
哪一个是最佳选择?
答案 0 :(得分:7)
从数据库中获取所有记录并在PHP中计算它们是非常浪费的废话。这正是数据库的用途。
find('count')
只会生成SELECT COUNT(*) FROM … WHERE …
这样的SQL查询,这是最快的方法。添加适当的条件以获得所需的计数,您可能需要了解SQL以了解这些条件。
还有counter-caching的特殊内容,如果您计算hasMany关系,可能需要查看。
答案 1 :(得分:1)
您应该修改您的查找调用以按条件包含组以按类型聚合计数。有关详细信息,请参阅此处:http://debuggable.com/posts/how-to-group-by-in-cakephps-new-release-part-2:4850d2c9-edbc-4f0e-9e0e-07d64834cda3