2012-10-23 1 views
0

내가하고 싶은 것은 나에게있어서 꽤 근사하지만, 원시 SQL을 사용하지 않고도 DataMapper를 사용하여 수행 할 방법을 찾지 못했습니다. 위의 쿼리의 의도는 나에게 각 사용자가 얼마나 많은 게시물에 의해 정렬 된 모든 사용자를 보여주는 것입니다(원시 SQL을 사용하지 않고) DataMapper를 사용하여 하위 레코드 수별로 레코드를 정렬 할 수 있습니까?

select u.id, u.name, count(p.id) as post_count 
from posts p 
inner join users u on p.user_id = u.id 
group by p.user_id 
order by post_count desc; 

: 그것은 같이 보일 것입니다. DataMapper를 사용하여 찾은 가장 가까운 것은 aggregate입니다. 다시 자원 객체를 제공하지 않습니다. 내가 무엇을 같은 하나의 쿼리를 생성하고 다시 표준 DM 개체를 얻을 수있는 방법입니다.

답변

-1

당신이

User.get(id).posts.count 

또는

User.first(:some_id => id).posts.count 

또는

u = User.get(1) 
u.posts.count 
을 할 수 있어야 당신이 관계

has_n, :posts 

을 가정

당신은 또한 조건

User.get(1).posts.all(:date.gt => '2012-10-01') 

이 범위 참조

http://datamapper.org/docs/find.html

마침내 내가 대답을 높이 평가 주문

User.get(1).posts.all(:order => [:date.desc]) 
+0

를 추가 여기에 체인을 체인 수있다; 하지만 뭔가를 놓치지 않는 한,이 방법은 아이 레코드 * 카운트 *를 정렬하는 법을 알려주지 않습니다. 그렇죠? 이것이 근본적으로 내 질문입니다. 예를 들어, 모든 사용자를 * 사용자별로 게시물 *별로 정렬하려면 어떻게해야합니까? (아마도'User.all (: order => {: posts => : count))'또는 이와 비슷한 것이지만, 분명히 작동하지는 않습니다.) –

+0

사용자 객체에서 게시물 개수를 추적 할 때 작동합니다 그것은 상당히 사소한 일입니다. User.all (: order => {: post_count.desc}). 전체적으로 데이터베이스에서 더 쉬울 수도 있습니다. 게시물을 추가 할 때 증가시켜야합니다. – socialsiem

+0

나는 그것이 사소하고 데이터베이스에서 더 쉬울 수도 있다는 것에 동의한다. 그러나, 나는 * 적절한 인덱싱으로 * 성능에 중요한 영향을 미치지 않을 것이라고 생각하지 않습니다. 더 중요한 것은 특정 ORM을 수용하기 위해 특정 데이터베이스 설계를 강요하지 않아야한다는 것입니다. 좀 거꾸로 보이지 않는가? –