转换SQL语句阿雷尔Rails的查询
问题描述:
所以,让我们直接:我挣扎几天都转换这个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的相同效果吗?
答
您可以使用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
来仅采用实际需要的列。
太棒了!我要去试试,谢谢! –