Ruby on rails 在rails中按天/月/年查询订单

Ruby on rails 在rails中按天/月/年查询订单,ruby-on-rails,ruby,postgresql,activerecord,Ruby On Rails,Ruby,Postgresql,Activerecord,让我解释一下我想做什么,我有一个表Clicks,其中保存了对产品的所有单击。我想画一张图表,显示客户点击某个东西的次数 此图表需要日、月和年视图 我需要的是一个散列或一个对象 我的想法是,我得到的是: 数据(2012=>[01=>100,02=>300,03=>50等]、2011=>[01=>100,02=>300,03=>50等]) 如何按照这样的顺序从postgresql数据库检索所有数据?我想在处获取创建的字段并从中提取日期。在以后的过程中,必须统计特定月份的所有项目 我一直在努力解决这个

让我解释一下我想做什么,我有一个表
Clicks
,其中保存了对产品的所有单击。我想画一张图表,显示客户点击某个东西的次数

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

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

我的想法是,我得到的是:

数据(2012=>[01=>100,02=>300,03=>50等]、2011=>[01=>100,02=>300,03=>50等])

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


我一直在努力解决这个问题,有人能把我推向正确的方向吗?

您发布的代码片段是针对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})
这将以
[年,月]=>计数的格式为您提供一个哈希值。要获得所需的格式,您需要稍微调整结果:

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
如果您正在使用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")

如果您可以按天保存总点击量,则按月份和年份检索总点击量将变得微不足道,因为您只需将30、31、365、366天的总点击量相加。您想简单描述数据库的模式,还是我们应该想象一下拼凑字段和表的名称?还有,给我们看一个您编写的代码示例,这样我们就不会重新发明您的特定轮子了。数据库中的字段是“用户id”、“产品id”、“创建时间”、“更新时间”。当没有显示内容时,图形将显示0。我想做的是:单击.where('user\u id=?',current\u user.id.).count。。这会统计该用户的所有点击次数,但不会统计一段时间内的点击次数。从stackoverflow这里的另一个问题中,我得到:@clicks=Click.select('count(distinct(id))作为id,year(created_at)作为y,month(created_at)作为m').group('y,m')。其中({:user_id=>current_user.id})但是这一年的中断(created_at)也尝试了以下操作:@clicks=Click.where({:user_id=>current_user.id})。count(“%m”,日期)