最初に (計算された距離で) 最も近い結果を表示し、それらをページ分割することができる SQL クエリを実装する方法を理解するのに苦労しています。
Class Location
belongs_to :student
geocoded_by :address
end
Class Student
has_one :location
has_one :school
end
Class School
belongs_to :student
end
SQL 内で、関連付け Student.joins(:location) を通過し、検索している学生の観点から最も近い学生を見つけることができるクエリが必要です。これは、特定の学校を指定した後です (つまり、学生全体のサブセット)
たとえば、Joe は LSU に通い、LSU にも通っている最も近い学生のリストを表示したいと考えています。ただし、距離は Joe の位置に基づいているため、Bob が同じクエリを実行した場合は異なります。
したがって、ジオコーダーが Location.nearbys(10) のようなものを提供することは知っていますが、私が本当にやりたいことは
joe = Student.find("Joe")
closest_lsu_stdents_to_joe = Student.where("school = LSU").order(distance_to(joe)).paginate(:page => params[:page])
だから私は近くのように指定された半径に検索を制限したくありません。データベースで Joe と LSU の他のすべての学生との距離を計算し、最も近い学生を最初に返すようにしたいだけです。そして、Joe はページネーションを介してすべての結果を調べることができます。
どんな助けでも大歓迎です。私は MySQL を使用していますが、他のソリューションも受け入れています。
どうもありがとう!!!