我有一个模型Link
——它有很多热门。我正在尝试做的是从数据库表中聚合每小时点击次数的数据hits
- 包含year
、month
、day
和hour
.
一切正常,但是当我运行下面的代码时,我最终对数据库进行了近 1,000 个查询,这似乎相当多。
#before iteration
@hits = @link.hits.group('year, month, day, hour')
.order('year ASC, month ASC, day ASC, hour ASC')
.select('year, month, day, hour, count(*) as hits')
#inside iteration
#Line breaks are included here for easy reading
hits_per_hour =
@hits.where(
:year => t.year,
:month => t.month,
:day => t.day,
:hour => t.hour
).map(&:hits).first || 0
这t
是一个Time
自第一次点击收到链接后以 1 小时为步长进行迭代的对象。
我认为 rails 会存储查询结果,而不是每次都重新查询。我也找不到任何有关缓存查询结果或任何内容的信息。我只是完全错过了一些东西,还是这真的是最简单的方法?
这是查询的示例(这是我在日志中看到的以一千块为单位的内容):
SELECT year, month, day, hour, count(*) as hits
FROM `hits`
WHERE
`hits`.`link_id` = 1 AND
`hits`.`year` = 2012 AND
`hits`.`month` = 11 AND
`hits`.`day` = 2 AND
`hits`.`hour` = 14
GROUP BY year, month, day, hour
ORDER BY year ASC, month ASC, day ASC, hour ASC