2010-12-14 14 views
1

ActiveRecordのgeokit-rails gemを使用して距離別にグループ化することはできますか?Rails/SQLの距離でグループ化しますか?

私は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 

右方向に任意のポイントは素晴らしいだろう!範囲によって1つのdbコールでレコードをチャンクする方法があります。

答えて

0

私は、次のデシベルの呼び出しはあなたが聞いて何をすると思います。

result = User.all(:select => "ROUND(distance/100) AS distance, COUNT(*) AS user_count", 
        :group => "ROUND(id/100)") 

これは、実際のユーザーインスタンスをロードしませんので、あなたがアクセスしたいデータを選択して指定する必要があります。次に、結果をループすることができます。

<% result.each do |group| %> 
    <p>Distance: <%= group.distance %>, Number of users: <%= group.user_count %></p> 
<% end %>