是否可以使用ActiveRecord的geokit-rails
gem进行距离分组?
假设我有10,000个用户,我想知道有多少是1英里,2英里......距离一个点100英里。我怎样才能在尽可能少的查询中做到这一点?
做这样的事情显然会导致性能下降:
(1..100).map { |i| User.count(:within => i, :origin => location) }
有什么可以做的:
User.count(:within => 100, :origin => location, :group => "distance / 100") # some sort of math perhaps
正确方向的任何一点都会很棒!某种通过范围在一个db调用中对记录进行分块的方法。
答案 0 :(得分:0)
我认为以下数据库调用可以满足您的要求:
result = User.all(:select => "ROUND(distance / 100) AS distance, COUNT(*) AS user_count",
:group => "ROUND(id / 100)")
由于这不会加载实际的用户实例,因此您必须在select中指定要访问的数据。然后你可以像这样循环结果:
<% result.each do |group| %>
<p>Distance: <%= group.distance %>, Number of users: <%= group.user_count %></p>
<% end %>