2012-06-19 1 views
1

Как сделать это (PostgreSQL) с использованием Rails синтаксис ?:Rails - "заказ на" после "объединение всех"

SELECT fld1, fld2 
FROM 
(
    SELECT fld1, fld2, count(*) as cnt FROM data WHERE fld2 not in('exclude1', 'exclude2') GROUP BY fld1, fld2 ORDER BY COUNT(*) DESC LIMIT 100 
    UNION ALL 
    SELECT fld1, fld2, count(*) as cnt FROM data WHERE fld2 in('exclude1', 'exclude2') GROUP BY fld1, fld2 
) x 
ORDER BY x.cnt DESC 

я сделал следующее:

my_data = (Data.all(
    :select => sel_clause, 
    :conditions => "data.fld2 not in %s" % [in_clause], 
    :group => grp_clause, 
    :order => 'count(*) desc', 
    :limit => @max_rows) << 
    Data.all(
     :select => sel_clause, 
     :conditions => "data.fld2 in %s" % [in_clause], 
     :group => grp_clause).order('cnt desc') 

Проблема заключается в том, что это < < не является классическим «UNION ALL», но объединение двух массивов и «порядок» не может быть применено к результирующему массиву.

ответ

1

Это место, где я обычно использую find_by_sql. Результаты будут возвращены в виде массива с запрошенными столбцами в качестве атрибутов модели, с которой вы вызываете этот метод.

http://ar.rubyonrails.org/classes/ActiveRecord/Base.html

~ Чарльз ~