我试图检查记录的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/

10-11 05:09