Группировать по расстоянию в Rails / SQL? - PullRequest
1 голос
/ 14 декабря 2010

Можно ли группировать по расстоянию, используя гем geokit-rails для ActiveRecord?

Скажем, у меня есть 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 Ответ

0 голосов
/ 14 декабря 2010

Я думаю, что следующий вызов db сделает то, что вы просите:

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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...