我试图检查记录的2.5秒间隔,并根据计数将对象添加到数组。这种方法有效,但速度太慢。谢谢
@tweets = Tweet.last(3000)
first_time = @tweets.first.created_at
last_time = @tweets.last.created_at
while first_time < last_time
group = @tweets.where(created_at: (first_time)..(first_time + 2.5.seconds)).count
if group == 0 || nil
puts "0 or nil"
first_id + 1
array << {tweets: 0}
else
first_id += group
array << {tweets: group}
end
first_time += 2.5.seconds
end
return array.to_json
end
最佳答案
您真正需要的是检索到的记录上的group_by
方法:
grouped = @tweets.group_by do |tweet|
# Convert from timestamp to 2.5s interval number
(tweet.created_at.to_f / 2.5).to_i
end
这将返回一个哈希值,其中键为时间间隔,值为推文数组。
您在示例中所做的工作可能会产生数千个查询。始终观看
log/development.log
以查看后台发生了什么。关于mysql - 更有效的事件记录分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25330289/