查找评论最多的帖子

时间:2009-12-16 09:45:29

标签: cakephp model

我有一个博客,我想找出找到评论最多的帖子的最佳方式。我有一个直接的设置,帖子有很多评论,评论属于帖子。

我试图找到1行“正确的方法”来做到这一点,但找不到它。我想成为十大评论帖。

由于

4 个答案:

答案 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字段(遗留代码等)太难了,您可以运行每小时/每日脚本来为您更新该号码,方法是执行第二个查询。我可能会建议您根据自己的要求从这些选项中进行选择。