2012-04-06 162 views
0

我想在我的模塊上執行:group:order,因爲Mysql會在按順序分組之前進行分組,而得到的結果並不是您所期望的。Rails/activerecords - group by by

對於該SQL的解決辦法是:

SELECT * FROM 

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

group by catid 

order by nid desc 

我怎麼能寫在Ruby中使用ActiveRecord?

回答

2

我想你可以只使用阿雷爾方法直接:

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