() 특정 필드에서 고유 한 모든 레코드를 어떻게 찾습니까?
-
19-08-2019 - |
문제
나는 '요청'객체 목록이 있으며, 각각은 상당히 정상적인 ActiveRecord 품질을 가지고 있습니다. 요청 테이블은 조인 테이블 'Games_Requests'가있는 게임 테이블과 관련이있어 요청에 요청. 게임 배열이 있습니다.
문제는 게임 열과 다른 몇 가지에 의해 독창성이 정의되는 마지막 N 고유 요청을 찾는 방법이 있지만 구체적으로 다른 컬럼을 무시합니다 (예 : 요청 사용자의 이름과 같이).
'find (: all, : limit => 5, : include => [: games, : stage]')와 같은 구문을 보았지만 복제 된 복제입니다.
감사...
편집 : 훌륭한 응답을 위해 혼돈에 감사드립니다. 당신은 저를 정말로 가까이 데려 갔지만 여전히 유효한 요청 객체가되기 위해서는 반품이 필요합니다. 요청 된 행에서 구별되는 첫 5 개의 레코드. 나는 당신이 그것을 구성 할 때 찾기를 사용할 수 있고, 첫 번째 찾기에 의해 반환 된 각 세트와 일치하는 테이블의 첫 번째 행에 대해 두 번째 찾기를 할 수 있습니다.
편집하다:
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 => 옵션을 사용해야 할 것 같아요.
해결책
Games.find(
:all, :limit => 5,
:include => [:games, :requests],
:group => 'games, whatever, whatever_else'
)
다른 팁
나는 당신이 find_by_sql 및 group을 사용하여 이것을 할 수 있다고 생각합니다.
Games.find_by_sql("SELECT * FROM games GROUP BY user_id")
제휴하지 않습니다 StackOverflow