1

假设我有一个使用 RailsPostsCommentsMySQL 的博客应用程序。

我想按评论数对帖子进行排名。(注意:不仅仅是排序,而是得到他们实际的第一、第二、第三名)。

另外,给定一个帖子,我希望能够在不将所有帖子加载到 Rails 并搜索它们的情况下获得它的排名。

例如“这篇文章的评论数排名第 372”

最后,如果两个帖子有相同数量的评论,它们应该有相同的排名——所以平局是可以的。

我在 MySQL 中似乎有一些巧妙的解决方案,例如这篇文章: How do I Handle Ties when Ranking Results in MySQL?

我想知道是否有一个更简单的解决方案,通过规范化帖子表的附加字段中的一些数据。

有没有人看到一个好的方法?

4

2 回答 2

2

仔细考虑这一点,我认为您可以通过几种不同的方式来添加此功能。

您可以将 Redis 添加到组合中并使用其排序集功能,这是本文中得分最高的示例,http://jimneath.org/2011/03/24/using-redis-with-ruby-on-rails.html

在我看来,这可能是最好的设计。您将分析部分与数据收集部分分开,并使用 Redis 最擅长的部分。

另一种方法是创建一个记录 post_id 和评论计数的 PostRanking 模型。您可以在此设置默认范围,以按评论数量降序排序并轻松查询。

于 2011-04-12T14:07:20.523 回答
0

这个问题看起来与为:counter_cache关联选项给出的示例相同。

看一看。

于 2012-09-20T23:06:17.813 回答