使用Postgres使用Rails在SQL IN()中按ID排序

时间:2014-10-31 19:25:54

标签: sql ruby-on-rails postgresql rails-geocoder

我正在发出2个查询,一个按照我需要的顺序收集ID,然后将它们传递到获取信息的第二个查询中,这是我的第一个查询:

Location.near([lat, lng], 1, units: :km).order("distance").map(&:id)

每个Location都有一个关联的Venue,我这样查询:

Venue.where("location_id IN (?)", location_ids)

我希望查询的场地在各自的位置具有相同的顺序。例如,如果位置1是第一个具有ID 5的位置并且与ID为10的场所相关联,则我希望该场地也是第二个查询中的第一个结果。

1 个答案:

答案 0 :(得分:0)

您需要在提取venues后依据location_ids订购:

我假设您在地点belongs_to :location中有关联:

class Venue < ActiveRecord::Base
  belongs_to :location
end

所以你的代码将是:

location_ids = Location.near([lat, lng], 1, units: :km).map(&:id)
Venue.joins(:location).where(locations: {id: location_ids }).order("locations.distance")