2013-07-16 4 views
0

주최자와 이벤트 모델간에 일대 다 관계가 있습니다.PostgreSQL에서 .select, .uniq 및 .order 사용

가장 최근에 이벤트를 업데이트 한 5 명의 주최자를 만나고 싶습니다.

Event.order('updated_at asc'). 
    where(organizer_id: [1,2,3,4,5,6,7,8,9]). 
    select(:organizer_id).uniq.limit(5) 

위의 코드는 sqlite3를 좋은 작동하지만 PostgreSQL을에서에게 Heroku에 때라도 오류가 발생합니다 : 나는 PG, 예를 들어,에서 쿼리 작업을 어떻게해야합니까

for SELECT DISTINCT, ORDER BY expressions must appear in select list 

을 오류 메시지에서 제안 된 방법으로?

가능하면 가능한 한 많은 ActiveRecord 인 솔루션을 선호합니다. 가능한 경우 순수한 SQL이 아닙니다.

+1

정도로 열을 넣어 "표현 BY ORDER이 선택 목록에 표시되어야합니다"당신을 당신의 선택에 주문하고 있습니다! – phoet

답변

3

updated_at으로 주문했지만 organizer_id만을 선택합니다. Postgres는 ORDER 절에 사용 된 필드가 SELECT 절에 있어야한다고 요구합니다. 목록에 updated_at을 추가해야합니다. SQL에서

, 지금 당신은 :

SELECT organizer_id FROM events WHERE ... ORDER BY updated_at asc; 

당신이 필요합니다 오류 메시지가 이미 상태

SELECT organizer_id, updated_at FROM events WHERE ... ORDER BY updated_at asc; 
+0

ActiveRecord-esque 쿼리로 변환하는 방법을 알고 계십니까? –

+0

'select' 절을 수정하십시오 :'select (: organizer_id, : updated_at)'. –

+0

이것이 완벽한 대답이라고 생각합니다. (upvotes에서 보았습니다.)하지만 유감 스럽지만 도움이되지 않습니다. select 메소드에 두 개의 매개 변수를 지정하면 .uniq 메소드가 작동하지 않게됩니다. :/여기 독특한 측면도 중요합니다 ..하지만 어쨌든 당신의 시간 동안 당신을 감사드립니다. –