3

让我解释一下我想做的事情,我有一个Clicks保存所有产品点击的表格。我想制作一张图表,说明客户点击了多少次。

此图表需要日、月和年视图。

我需要的是一个散列或一个对象。

我的想法是我得到类似的东西:

data( 2012 => [ 01 => 100, 02 => 300, 03 => 50 etc.], 2011 => [ 01 => 100, 02 => 300, 03 => 50 etc.])

如何按这样的顺序从 postgresql 数据库中检索所有数据?我想获取该created_at字段并从那里提取日期。在以后的过程中,必须计算特定月份的所有项目。

我在这个问题上苦苦挣扎,有人能把我推向正确的方向吗?

4

2 回答 2

3

如果您使用 Postgree(或 Heroku whit PG)可以这样做:

按月:

Consumer.all.order("extract(month from created_at) DESC")

按天

Consumer.all.order("extract(day from created_at) DESC")

按年份

Consumer.all.order("extract(year from created_at) DESC")
于 2014-07-04T17:10:59.797 回答
3

您发布的片段适用于 MySQL - 在 PostgreSQL 中执行相同操作:

@clicks = Click.select("count(*) as c, date_part('year', created_at) as y, date_part('month', created_at) as m").
                group("y", "m").
                where({:user_id => current_user.id})

这将为您提供格式的哈希[year, month] => count。为了得到你想要的格式,你需要稍微调整一下结果:

results = @clicks.inject({}) do |m, kv|
  year, month = kv.first
  clicks = kv.last
  m[year] ||= {}
  m[year][month] = clicks
  m
end

或者更简洁一点:

results = @clicks.each_with_object({}) do |((year, month), clicks), m|
  (m[year] ||= {})[month] = clicks
end
于 2012-12-17T18:54:33.507 回答