【问题标题】:Sort a table using the total of other tables使用其他表格的总数对表格进行排序
【发布时间】:2018-08-15 07:26:26
【问题描述】:

2 个表:membershipsweek_scores

会员 has_many :week_scores

WeekScore belongs_to :membership

每个会员有 16 个week_scores

每个week_score 表都有一个score 列,其中包含一个从0 到20 的整数。

所以为了清楚起见,所有成员都有 16 个 week_scores,我想显示该组所有成员的 leaderboard table,按所有 16 个 week_scores 表的总分排序。

它应该看起来像这样

用户名 |分数

  1. 大卫 | 114
  2. 瑞克 | 97
  3. 迈克 | 95
  4. ...

分数列应该是一个用户拥有的所有week_scores 的总和,所以在大卫的情况下它是

week_score.score 1: 15  
week_score.score 2: 12  
week_score.score 3: 14  
...  
week_score.score 16: 9  
total: 114  

如果帖子名称不好,请告诉我。

【问题讨论】:

标签: ruby-on-rails ruby sorting


【解决方案1】:

一种方法是使用子选择:

subselect = "SELECT SUM(score) FROM week_scores WHERE membership_id=memberships.id"
@memberships = Membership.
  select("memberships.*, (#{subselect}) AS total_score").
  order("total_score DESC")

在 select 子句中指定的附加列 (total_score) 将在返回的成员资格实例上可用,就好像它是“真实”属性一样,因此调用类似 @memberships.first.total_score 的内容将起作用。

(请注意,我将子选择提取到单独的变量中只是为了使代码更具可读性,当然也可以将其内联。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2016-01-06
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多