2012-10-18 3 views
3

저는 Rails 3.2 앱을 구축 중이며이 앱에는 두 개의 테이블 (포스트 그레스)이 있습니다. 하나는 사용자라고하고 다른 하나는 메시지라고합니다.수를 그룹화하고 제한하는 방법

메시지 테이블에 user_id라는 열이 있습니다. 각 사용자가 작성한 메시지 수를 얻고 목록에 표시 할 수 있어야하며 100 개 이상의 메시지를 작성한 메시지 만 가져올 수 있어야합니다. 이것이 한 번의 호출로 수행 될 수 있다면 완벽 할 것입니다.

이것은 지금까지 작성한 코드이며 각 사용자가 작성한 메시지의 수를 얻기 위해 작동하지만 100 개가 넘는 메시지 만 가져와야합니다.

@messages = Message.group("user_id").order("count_all DESC").count 
+0

이의 SQL은 (ON 메시지를 가입 사용자 INNER FROM, USER_ID SELECT (message.message_id) 계산 '될 것 user.user_id = message.user_id) GROUP BY user.user_id 수 (message.message_id)> 100입니다. 'INNER JOIN' 대신'LEFT OUTER JOIN'을 사용하고 메시지가없는 사용자를 포함하여 모든 사용자를 포함 시키려면'HAVING' 절을 생략하십시오. –

답변

5

시도 :

@messages = Message.count(:all, :group => 'user_id, HAVING COUNT(*) > 100') 

또는

@messages = Message.group('user_id').having('COUNT(*) > 100').count 
+0

mm 멋지지만 레일 3에서 어떤 모습일까요? –

+1

@JonathanClark 또는 편집 된 것을 시도하십시오. – xdazz

+0

완벽한, 감사합니다! 느린 쿼리입니까? –

관련 문제