所以,让我们直截了当:我几天都在努力转换这个SQL语句:
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 rails查询。有人知道如何制作一个与上述SQL具有相同效果的Arel查询?
答案 0 :(得分: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
来只选择你真正需要的列。
答案 1 :(得分:0)
最近我发现了这个很棒的项目
http://www.scuttle.io/