【发布时间】:2011-06-20 10:51:21
【问题描述】:
Rails 2.3.4
我已经搜索了谷歌,并没有找到我的困境的答案。
对于这个讨论,我有两个模型。用户和条目。用户可以有多个条目(每天一个)。
条目具有值和 sent_at 日期。
我想按星期几查询并显示用户条目的平均值。因此,如果用户输入了过去 3 周的值,我想显示周日、周一等的平均值。在 MySQL 中,这很简单:
SELECT DAYOFWEEK(sent_at) as day, AVG(value) as average FROM entries WHERE user_id = ? GROUP BY 1
该查询将返回 0 到 7 条记录,具体取决于用户至少拥有一个条目的天数。
我查看了 find_by_sql,但是在搜索 Entry 时,我不想返回 Entry 对象;相反,我需要一个最多 7 天和平均值的数组...
另外,我有点担心它的性能,因为我们想在用户登录时将它加载到用户模型中,以便它可以显示在他们的仪表板上。欢迎任何建议/指点。我对 Rails 比较陌生。
【问题讨论】:
-
经过一些进一步的研究和调整,我发现这会起作用: @ee=Entry.all(:select => "dayofweek(entries.sent_at) as Day,avg( entry.value) as Value", :group => "dayofweek(sent_at)", :conditions => ['user_id = ?', self.id]) 虽然看起来很难看,而且可能效率不高.我会检查我得到的答案,看看它们是否更好。
标签: sql ruby-on-rails aggregate dayofweek