mar*_*iec 7 sql ruby-on-rails rails-activerecord
我需要这个SQL查询Rails友好:
SELECT *,
IF (store.availability_offset IS NULL, DATE_ADD(product.release_date, INTERVAL 0 DAY), DATE_ADD(product.release_date, INTERVAL store.availability_offset DAY))
FROM products JOIN stores ON product.store_id = stores.id
WHERE (DATE_ADD(products.release_date, INTERVAL stores.availability_offset DAY) BETWEEN '2013-06-12' AND '2014-07-12' OR DATE_ADD(products.release_date, INTERVAL 0 DAY) BETWEEN '2013-06-12' AND '2014-07-12');
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的Rails查询:
@products = Product.joins(:store).where("products.release_date >= :start_date AND products.publishing_date <= :end_date)", :start_date => params[:search][:start_date], :end_date => params[:search][:end_date]")
Run Code Online (Sandbox Code Playgroud)
我想做的事:
实现IF条件,以便availability_offset在其值为NULL的情况下管理商店.
实现DATE_ADD()能够将availability_offset值添加到日期的功能release date.
如果不使用SQL sintax,只需ActiveRecord,我怎么能这样做?谢谢!
您只需将 SQL 选择复制到 Rails ActiveRecord 选择中即可。尝试这样做:
@products = Product.select('products.*, IF(store.availability_offset IS NULL, DATE_ADD(products.release_date, INTERVAL 0 DAY), DATE_ADD(products.release_date, INTERVAL stores.availability_offset DAY)) AS store_availability_offset')
    .joins(:store).where("products.release_date >= :start_date AND products.publishing_date <= :end_date)", :start_date => params[:search][:start_date], :end_date => params[:search][:end_date]")
Run Code Online (Sandbox Code Playgroud)
对于ifselect 中的语句,我使用 alias column into store_availability_offset。我希望这对你有帮助。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           459 次  |  
        
|   最近记录:  |