[英]Trouble with a nested query in Ruby on Rails
我有三个模型Field
, Flight
和FieldBoundaryDetail
。 Field
有多个Flights
并且只有一个FieldBoundaryDetail
基本上,我想在最后一次飞行中获取每个Field
和FieldBoundaryDetail
。
我已经用SQL编写了它。 为了进行排序和搜索,我需要将其设置为Rails ActiveRecordRelation,但很难将其转换为Rails。
SELECT *
FROM fields
LEFT JOIN (SELECT *
FROM (SELECT *
FROM flights
ORDER BY event_date DESC) AS flight
GROUP BY flight.field_id
) AS flight ON fields.id = flight.field_id
INNER JOIN field_boundary_details ON fields.id = field_boundary_details.field_id
作为一个简单的答案,您可以将find_by_sql
与您稍作修改的查询一起使用:
Fields.find_by_sql "SELECT fields.*
FROM fields
LEFT JOIN (SELECT *
FROM (SELECT *
FROM flights
ORDER BY event_date DESC) AS flight
GROUP BY flight.field_id
) AS flight ON fields.id = flight.field_id
INNER JOIN field_boundary_details ON fields.id = field_boundary_details.field_id"
我有一个解决方案,但这不是很好。 希望有人能给出更好的答案。
latest_flight_ids = Field.latest_flight_for_each_field.map {|flight| flight.id.to_s}.join(",")
Field.select("*").
joins("LEFT JOIN flights on fields.id = flights.field_id").
joins(:field_boundary_detail).
where("flights.id IN(#{latest_flight_ids}) OR flights.id IS NULL")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.