繁体   English   中英

Ruby on Rails中的嵌套查询麻烦

[英]Trouble with a nested query in Ruby on Rails

我有三个模型FieldFlightFieldBoundaryDetail Field有多个Flights并且只有一个FieldBoundaryDetail

基本上,我想在最后一次飞行中获取每个FieldFieldBoundaryDetail

我已经用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM