Mysql 如何通过关联在SQL查询中利用geocoder距离函数

Mysql 如何通过关联在SQL查询中利用geocoder距离函数,mysql,sql,ruby-on-rails-3,distance,rails-geocoder,Mysql,Sql,Ruby On Rails 3,Distance,Rails Geocoder,我在弄清楚如何实现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中,我希望有一个查询可以通过关

我在弄清楚如何实现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的位置的,所以如果Bob运行相同的查询,这将是不同的

所以我知道geocoder提供了类似于Location.nearbys(10)的东西,但我真正想做的是说

joe = Student.find("Joe")

closest_lsu_stdents_to_joe = Student.where("school = LSU").order(distance_to(joe)).paginate(:page => params[:page])
所以我不想像nearbys那样将搜索限制在指定的半径内。我只想让数据库计算乔和LSU所有其他学生之间的距离,然后首先返回最接近的学生。然后Joe可以通过分页查看所有结果

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


非常感谢

我不知道这是否有帮助,但我发现了这篇文章:-基本上是一个子选择执行一些操作来计算距离字段,然后你可以简单地按该字段排序。这就是你想要的吗?这可能也会有帮助-一种通过剔除某个边界框之外的记录来优化距离计算的方法:@AlexParker谢谢你的快速回复。我已经看到了您引用的代码片段,我认为这可能是我采用的方法(这似乎是最简单的方法)。似乎还有一些其他的选择,比如mysql中的存储过程,或者切换到使用地理空间数据库,比如postgres w/postgis。我有点希望rails geocoder gem能够处理这种查询。看起来不太复杂,但我可能错了。虽然我对数据库和许多平台和框架有相当的经验,但RoR不属于我的专业领域,所以我不能谈论rails的任何特定内容。我现在刚刚开始一个项目,有大量基于地理位置的数据,而且也考虑过切换到pg。无论如何,我希望你能很快找到答案,我很想看看结果如何。我不知道这是否有帮助,但我发现了这篇文章:-基本上是一个子选择执行一些操作来计算距离字段,然后你可以简单地按该字段排序。这就是你想要的吗?这可能也会有帮助-一种通过剔除某个边界框之外的记录来优化距离计算的方法:@AlexParker谢谢你的快速回复。我已经看到了您引用的代码片段,我认为这可能是我采用的方法(这似乎是最简单的方法)。似乎还有一些其他的选择,比如mysql中的存储过程,或者切换到使用地理空间数据库,比如postgres w/postgis。我有点希望rails geocoder gem能够处理这种查询。看起来不太复杂,但我可能错了。虽然我对数据库和许多平台和框架有相当的经验,但RoR不属于我的专业领域,所以我不能谈论rails的任何特定内容。我现在刚刚开始一个项目,有大量基于地理位置的数据,而且也考虑过切换到pg。无论如何,我希望你能尽快找到答案,我很想看看结果如何。