我有一个'request'对象列表,每个对象都具有相当正常的activerecord质量。 requests表与带有连接表'games_requests'的游戏表相关,因此请求具有request.games数组。
问题是,有没有办法找到最后n个唯一请求,其中唯一性由游戏列和其他几个定义,但特别忽略其他列(如请求用户的名称?)
我看到了'find(:all,:limit => 5,:include => [:games,:stage])'这样的语法,但是它返回了重复项。
...谢谢
编辑:感谢混乱的回应。你让我非常接近,但我仍然需要返回有效的请求对象:前5条记录在请求的行中是不同的。我可以在构造它时使用find,然后对表中的第一行执行第二次查找,该第一行匹配第一个查找返回的每个集合。编辑:
Games.find(
:all, :limit => 5,
:include => [:games, :requests],
:group => 'games, whatever, whatever_else'
)
...给出了一个SQL错误:
Mysql::Error: Unknown column 'games' in 'group statement': SELECT * FROM `games` GROUP BY games
我对我认为对我的项目正确的做了一些改变;获取请求列表而不是游戏等:
Request.find(
:all, :order=>"id DESC", :limit=>5,
:include=>[:games], #including requests here generates an sql error
:group=>'games, etc' #mysql error: games isn't an attribute of requests
:conditions=>'etc'
)
我想我将不得不使用:join =>选项在这里。
答案 0 :(得分:9)
Games.find(
:all, :limit => 5,
:include => [:games, :requests],
:group => 'games, whatever, whatever_else'
)
答案 1 :(得分:6)
答案 2 :(得分:0)
我认为你可以使用find_by_sql和GROUP BY:
来做到这一点Games.find_by_sql("SELECT * FROM games GROUP BY user_id")