我有两个模型,users
和locations
,彼此之间没有任何关联,它们都有latitude
和longitude
列。
我需要查询每个users
内的所有locations
和所有locations
,并按users
实际上,我需要一组结果,将locations
组合在一定半径范围内users
将会有足够的if Ope=="add"or"Add":
来简单地迭代它们是不切实际的,所以我正在寻找SQL或Rails选择它们的方式
我正在使用rails地理编码器(https://github.com/alexreisner/geocoder)
答案 0 :(得分:0)
问题被低估了,但我会发布我最后的答案
我不得不取消地理编码器宝石,因为它没有很好地用弹拨或选择,只需手动使用方程式,最后使用:
User.select("ARRAY_AGG(users.id) as user_list, (SELECT array(SELECT locations.id from locations WHERE (6371.0 * 2 * ASIN(SQRT(POWER(SIN((users.latitude - locations.latitude) * PI() / 180 / 2), 2) + COS(users.latitude * PI() / 180) * COS(locations.latitude * PI() / 180) * POWER(SIN((users.longitude - locations.longitude) * PI() / 180 / 2), 2)))) <= CAST(<whatever radius> AS float))) as location_list").group("location_list")