2012-04-06 164 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