2

我在弄清楚如何实现 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 可以通过分页浏览所有结果。

任何帮助将非常感激。我正在使用 MySQL,但对其他解决方案持开放态度。

非常感谢!!!

4

0 回答 0