我有一个博客,我想找出找到评论最多的帖子的最佳方式。我有一个直接的设置,帖子有很多评论,评论属于帖子。
我试图找到1行“正确的方法”来做到这一点,但找不到它。我想成为十大评论帖。
由于
答案 0 :(得分:3)
CakePHP具有counterCache功能,用于此目的。
确保您的帖子表包含'comment_count'字段。
然后将counterCache键添加到Comment模型的belongsTo Post设置。
// app/models/comment.php
var $belongsTo = array(
'Post' => array(
'counterCache' => true
)
);
每当添加或删除属于该帖子的评论时,CakePHP现在将自动递增/递减Post.comment_count字段。
获得评论最多的10个帖子:
// app/models/post.php
function getTopCommentedPosts($limit = 10) {
return $this->find('all', array(
'order' => 'Post.comment_count DESC',
'limit' => $limit
));
}
然后从需要此数据的任何控制器操作中调用此方法。如果来自PostsController以外的控制器使用:
$this->set('posts', ClassRegistry::init('Post')->getTopCommentedPosts());
答案 1 :(得分:1)
你在数据库中有这个吗?如果是这样,也许你可以使用post表中的计算字段来跟踪每个帖子的评论数量。
然后使用
SELECT TOP 10 FROM Post ORDER BY CommentNumber DESC
答案 2 :(得分:0)
如果CakePHP允许您使用直接SQL查询:
SELECT
POST.POST_ID
COUNT(*)
FROM
POST_TABLE POST
INNER JOIN COMMENT_TABLE COMMENT ON COMMENT.POST_ID = POST.POST_ID
GROUP BY POST.POST_ID
ORDER BY COUNT(*)
应该做的伎俩,可能会非常有效。
答案 3 :(得分:0)
我会混合这两种方法,主要是b / c我不知道你的约束或你的主要关注点。无论是亚当斯还是莫拉努的解决方案,都会有所不同。
如果你有一个大数据库,性能是一个问题,你应该采取第一种方法。每次添加新评论时,都需要您增加该数字。或者,如果您的网站不需要频繁更新前10个内容,则可以缓存“前10个评论帖子”Feed。
我的建议:如果增加CommentNumber字段(遗留代码等)太难了,您可以运行每小时/每日脚本来为您更新该号码,方法是执行第二个查询。我可能会建议您根据自己的要求从这些选项中进行选择。