2012-04-06 4 views
0

Я хочу выполнить :group и :order на моем модуле, так как Mysql делает группу перед заказом, вы получаете смешанные результаты, а не то, что вы ожидали.Rails/activerecords - группа по иному заказу от

SQL-решение для этого будет:

SELECT * FROM 

(
select * from `my_table` order by timestamp desc 
) as my_table_tmp 

group by catid 

order by nid desc 

как я могу написать, что в рубине с использованием ActiveRecord?

ответ

2

Я думаю, вы можете просто использовать методы Arel непосредственно:

MyTable.from("(SELECT * FROM my_table ORDER BY timestamp DESC) as my_table").group(:catid).order("nid DESC") 
0
query = <<-sql_statement 

    SELECT * FROM 

    (
    select * from `my_table` order by timestamp desc 
) as my_table_tmp 

    group by catid 

    order by nid desc 

sql_statement 

result = MyTable.connection.execute(query) 

Вы также можете использовать ActiveRecord::Base.connection.execute(query).

Чтобы пройти через возвращаемые записи, используйте result.each.

Пример (из mysql2 жемчужину repo):

results.each do |row| 
    # conveniently, row is a hash 
    # the keys are the fields, as you'd expect 
    # the values are pre-built ruby primitives mapped from their corresponding field types in MySQL 
    # Here's an otter: http://farm1.static.flickr.com/130/398077070_b8795d0ef3_b.jpg 
end 
Смежные вопросы