代码之家  ›  专栏  ›  技术社区  ›  Axil

在当前活动记录/sql查询上使用联接、顺序、不同项进行优化

  •  0
  • Axil  · 技术社区  · 6 年前

    我目前正在使用rubyonrails4和postgres,并按照下面的代码进行区分和排序。

    我只是有一种感觉是不正确的,没有优化,因为它似乎是做所有这一切与数组。

    如何将所有这些合并到一个activerecords查询中?

    ads1 = Advertisement.where(property_id: nil)
                        .where(target_address_city: [property.address_city, ""], 
                               target_address_state: [property.address_state, ""], 
                               target_address_country_id: property.address_country_id)              
    # return advertisement belongs to the property
    ads2 = management.property.advertisements
    #combine both results
    combine_ads = ads1 + ads2
    #remove ads duplicate
    uniq_ads = combine_ads.uniq { |ads| ads.id}
    # sort by created_at desc
    uniq_ads = uniq_ads.sort_by { |ads| -ads[:id]}
    # do pagination
    final_ads = uniq_ads.paginate(:page => params[:page], :per_page => params[:page_limit])
    
    0 回复  |  直到 6 年前