2017-05-26 56 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

太棒了!我要去試試,謝謝! –