2017-05-26 57 views
0

所以,让我们直接:我挣扎几天都转换这个SQL语句:转换SQL语句阿雷尔Rails的查询

select * from (
    select distinct on (program_id) editions.*, programs.* 
    from editions inner join programs on editions.program_id = programs.id 
    where programs.station_id = 1) as editionsprograms 
order by fixed desc, published_at desc, time desc 
limit 4; 

到阿雷尔轨查询。有人有任何想法可以使一个Arel查询具有上述SQL的相同效果吗?

回答

1

您可以使用from方法来完成查询中棘手的部分(从子查询中进行选择)。子查询本身应该是一个简单的映射(select,joins,where等)。所以结果会是这样的:

Edition.select('*') 
.from(
    Editions.select('DISTINCT ON (program_id) editions.*, programs.*') 
      .joins(:programs) 
      .where(programs: { station_id: 1 }) 
) 
.order(fixed: :desc, published_at: :desc, time: :desc) 
.limit(4) 

这将返回版的记录,从存储在每个节目记录的附加数据。为了避免那种结果类型的怪异,它也可能只是抛出错误而无法解决,你可以直接使用Arel(类似的语法),或者在末尾使用.pluck来仅采用实际需要的列。

+0

太棒了!我要去试试,谢谢! –