【问题标题】:Order table by grouping values in another table通过对另一个表中的值进行分组来排序表
【发布时间】:2011-02-16 05:11:19
【问题描述】:

我有一个问题表:标题 每个问题都有答案,在另一个表中:文本,question_id 每个答案都有投票,在另一个表中:answer_id

我可以用

求总票数
question.votes.count

我已经看到如何将投票数据库分组在 http://guides.rubyonrails.org/active_record_querying.html#group

Vote.group("answer_id")

但我想按投票排序我的问题。那是通过对另一个表的分组从一个表中排序一个数组。这可能吗?

q=Question.last
q.answers.order_by_vote #How to do this?

我认为我的答案可能是在答案模型上做一个范围,该模型对属于该问题的投票子集进行分组。我说的对吗?

谢谢。

【问题讨论】:

    标签: ruby-on-rails database ruby-on-rails-3 sql-order-by grouping


    【解决方案1】:

    首先,当您说 DB(数据库)时,我认为您的意思是表。表是数据库中的一种结构,用于保存特定模型的数据,例如(问题、投票和答案。在您的情况下,您有三个表。

    其次,调用 attr_accessible :answer_id 不会使属性可通过索引进行搜索。无论您是否声明它可访问,都可以通过此属性搜索它。除非您将其指定为数据库中的索引,否则它不是索引。 attr_accessible 表示可以使用批量分配设置属性,例如当您调用 update_attributes 时。

    最后,如果您想按 answer_id 分组并按票数排序,您可以使用以下查询:

    Vote.select('count(id) as votes, answer_id').group('answer_id').order('votes DESC')
    

    如果您想按除分组依据之外的其他值进行排序,您还必须将其添加到您的组中。这可确保您不会得到第二个值的任意结果。例如:

    Vote.group('answer_id').group('column_1').order('column_1 DESC')
    

    【讨论】:

    • 之前首先感谢您的回答。我将编辑问题以解决我对 DB 而不是 table 和 attr_accesible 而不是 scope 的误解
    【解决方案2】:

    我刚刚想出了一种方法来按投票计数来组织我的链接,使用我的链接视图中的排序方法:

    <% @user.links.sort { |a, b| b.votes.sum(:score) <=> a.votes.sum(:score) }.each do |link| %>

    votes.sum(:score) 从投票表中获取特定链接的投票数。

    希望有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 2022-10-15
      • 2020-10-25
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多