让我解释一下我想要做什么,我有一张表Clicks
,其中保存了产品的所有点击。我想制作一个图表,说明客户点击了多少次。
此图表需要日,月和年视图。
图表工作所需的是哈希或对象。
我的想法是,我得到了类似的东西:
data( 2012 => [ 01 => 100, 02 => 300, 03 => 50 etc.], 2011 => [ 01 => 100, 02 => 300, 03 => 50 etc.])
如何以这样的顺序从postgresql数据库中检索所有数据?我想获取created_at
字段并从那里提取日期。在以后的过程中,必须计算特定月份的所有项目。
我正在努力解决这个问题,有人会把我推向正确的方向吗?
答案 0 :(得分: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
答案 1 :(得分:3)
如果您使用Postgre(或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")