mysql - 在 Rails 中对模型进行排名的最佳方式是什么

标签 mysql ruby-on-rails ranking rank

假设我有一个使用 Rails 和 MySQL 的博客应用程序的 PostsComments

我想按评论数量对帖子进行排名。 (注意:不只是排序,而是得到他们实际的第 1、2、3 名)。

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

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

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

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

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

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

最佳答案

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

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

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

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

关于mysql - 在 Rails 中对模型进行排名的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5629377/

相关文章:

php - 转到我在表中的排名

mysql - 使用重复的数据库记录创建排名和统计

mysql - 数据库执行结果和mybatis执行结果不一致

mysql - 当行的值为 'x' 时,跳过 MySQL LOAD DATA INFILE 语句中的行

javascript - 在 php 中解释 json 并将其传递给 mysql 时遇到问题

ruby-on-rails - 从哈希构造时,ruby-on-rails 的操作顺序是什么?

ruby-on-rails - 将 Carrierwave 和 Capistrano 与 Rails 结合使用

ruby-on-rails - Rails 4 - Resque 后台作业中的印象派

mysql - Laravel 在大数据分页时性能低下

mysql - 在 GROUP BY 中使用 LIMIT 来获得每组 N 个结果?