2010-12-14 3 views
1

ActiveRecord에 geokit-rails 보석을 사용하여 거리별로 그룹화 할 수 있습니까?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 

모든 점은 좋지 않을까! 범위에 따라 하나의 db 호출에서 레코드를 청크하는 일종의 방법.

답변

0

나는 다음과 같은 DB 호출이 당신을 위해 무엇을 물어 할 생각이 이후

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 %> 
관련 문제