假设我有一个使用 Rails 和 MySQL 的博客应用程序的 Posts
和 Comments
。
我想按评论数量对帖子进行排名。 (注意:不只是排序,而是得到他们实际的第 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/