【问题标题】:ruby on rails 4 activerecord - combine and unique joins query optimizationruby on rails 4 activerecord - 组合和唯一连接查询优化
【发布时间】:2018-06-23 18:11:25
【问题描述】:

我正在尝试确定这个 activerecord 查询是否良好,或者是否应该对此进行更好的优化?

我需要合并 3 个查询并确保结果是唯一的。我正在使用 .uniq

ads1 = Advertisement.where(city: property.city, state: property.state, country_id: property.address_country_id)
ads2 = Advertisement.where(city: nil, state: property.state, country_id: property.address_country_id)
ads3 = Advertisement.where(city: nil, state: nil, country_id: property.address_country_id)

combine_ads = ads1 + ads2 + ads3
uniq_ads = combine_ads.uniq { |ads| ads.id}
uniq_ads = uniq_ads.sort_by { |ads| ads.created_at}
final_ads = uniq_ads.paginate(:page => params[:page], :per_page => params[:page_limit])
status 200
present final_ads, with: Api::Presenters::AdvertisementDetail

我在 rails 4 上使用 ruby​​

gem 'rails', '4.2.4'

您能否回顾一下上面的 activerecords 组合的唯一连接,如果它很好或者有更好的优化方法可以提供反馈吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 join activerecord


    【解决方案1】:

    您应该将combine_ads 更改为:

    combine_ads = Advertisement.where(city: [property.city, nil], 
                                      state: [property.state, nil], 
                                      country_id: property.address_country_id)
                               .order('created_at asc')
    

    上面唯一的额外情况是,它也会有那些行,其中cityproperty.city,但statenil,您的细分没有跟踪。

    您也不需要uniq_ads,我们已经通过created_at 订购。

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多