小编典典

Rails Union hack,如何将两个不同的查询放在一起

sql

我有一个查询,该查询在同一张表中搜索两个单独的字段…查找最有可能是特定城市但也可能是国家/地区的位置…即需要两个字段。

表格看起来像:

Country    City

Germany    Aachen
USA        Amarillo
USA        Austin

结果:

Keyword   Sideinfo

Aachen    Germany
USA       Country
Austin    USA
Germany   Country

基本上,我想知道是否还有一种更简洁的方法,因为我不得不使用两个单独的查询,然后将它们添加在一起,对其进行排序等(效果很好):

  def self.ajax(search)
    countries = Location.find(:all, :select=> 'country AS keyword,  "Country" AS sideinfo', :joins => :hotels, :conditions => [ 'hotels.email IS NOT NULL AND country LIKE ?', "#{search}%" ], :group => :country )
    cities = Location.find(:all, :select=> 'city AS keyword, country AS sideinfo', :joins => :hotels, :conditions => [ 'hotels.email IS NOT NULL AND city LIKE ?', "#{search}%" ], :group => :city )
    out = cities + countries
    out = out.sort { |a,b| a.keyword <=> b.keyword }
    out.first(8)
  end

我找不到有关如何使用ActiveRecord进行联合的任何信息…


阅读 179

收藏
2021-03-23

共1个答案

小编典典

ActiveRecord本身无法进行UNION查询。因此,有两种解决方案:

  • 根据需要使用find_by_sql构建查询。我不建议这样做。
  • 使用类似union的插件来执行UNION sql查询。
2021-03-23