[英]How to write this sql query in Ruby Join query (Ruby on Rails)
SELECT rs.id as rs_id,
sum(rs.amount_per_month) as rs_am1,
sum(rs.amount_per_month_per_sqft) as rs_am2,
rs.from_date,rs.to_date,cc.charge_type as cc
FROM lease_rent_rolls as lrr
INNER JOIN leases as l ON lrr.lease_id = l.id
INNER JOIN rents as r ON l.id = r.lease_id
INNER JOIN rent_schedules as rs ON r.id = rs.rent_id
INNER JOIN charge_codes as cc ON rs.charge_code_id = cc.id
WHERE lrr.id = 449443
AND DATE(NOW()) BETWEEN rs.from_date AND rs.to_date
GROUP BY cc.charge_type
我在使用find_by_sql
模型中使用此SQL查詢,但是我應該在沒有SQL幫助的情況下在Ruby Joins中獲得相同的結果。
如果您將提供關聯,那么提供解決方案將更有用。
現在,我正在考慮:
LeaseRentRoll有一個或多個租約。
租賃有很多租金。
租金有很多租金時間表。
和RentSchedule有許多charge_code。
如果LeaseRentRoll有一項租約:
LeaseRentRoll.where(:id => 449443).first.lease.joins(:rents => [:rent_schedules => charge_codes]).select("rent_schedules.id as rs_id, sum(rent_schedules.amount_per_month) as rs_am1, sum(rent_schedules.amount_per_month_per_sqft) as rs_am2,
rent_schedules.from_date,rent_schedules.to_date,charge_codes.charge_type as cc“)
如果LeaseRentRoll有許多租約:
LeaseRentRoll.where(:id => 449443).first.leases.joins(:rents => [:rent_schedules => charge_codes]).select("rent_schedules.id as rs_id, sum(rent_schedules.amount_per_month) as rs_am1, sum(rent_schedules.amount_per_month_per_sqft) as rs_am2, rent_schedules.from_date,rent_schedules.to_date,charge_codes.charge_type as cc")
請看附件圖片。 這將有助於對上述查詢有更多的了解。
RentSchedule.joins([{:rent => {:lease => :lease_rent_rolls}}, :charge_code]).where("lease_rent_rolls.id = #{lease_rr.id}
and rent_schedules.from_date < '#{Date.today.strftime("%Y-%m-%d %H:%M:%s")}'
and rent_schedules.to_date > '#{Date.today.strftime("%Y-%m-%d %H:%M%s")}'").group("charge_codes.charge_type")
得到了該查詢的結果。謝謝大家!
像這樣:
@goods =Good.joins(:user).where("name like ?", "%#{@searched_good}%").where("category_id = ?", params[:category]).where("postal_code == ?", @searched_good_postal_code)
其中:-category_id和name屬於Good數組-postal_code屬於User數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.