2011-04-12 2 views
3

그래서 특정 날짜에 대한 항목 수를 얻으려면 activerecord 사용하고 있습니다.시간별로 ActiveRecord 그룹을 RIL 값으로 채 웁니다.

Item.group("date(created_at)").count.values 

그러나 주어진 날에 대한 레코드가없는 경우이 0주지 않습니다, 어떻게이 문제를 해결할 수 있습니까? 아니면 더 많은 "레일"방식으로 이런 식으로 할 수 있습니까?

어떤 도움도 대단히 감사합니다. 다시 한 번 감사드립니다!

답변

3

GROUP BY 쿼리를 사용하면 존재하는 레코드를 기반으로 그룹을 가져 오므로 그룹화 열에 주어진 값을 가진 레코드가 없으면 해당 값에 대한 그룹이 없습니다. 데이터베이스가 당신이 관심을 가질만한 다른 날짜 값을 추가하는 것을 알지는 못합니다.

기본값은 0 인 새 해시를 만든 다음 그걸 질문해라. 이후 해시에서 항목이없는 값을 검색하려고하면 결과가 0이됩니다.

편집 : 당신이 확실 범위 내의 모든 날짜의 해시에 항목이 만들고 싶어 당신이 그 이상 반복 할 수 있도록, 또는 .values

date_counts = Hash.new(0) 
date_counts.merge! Item.group("date(created_at)").count 

를 제거 ...

date_counts = {} 
(Date.civil(2010,1,1)...Date.civil(2010,2,1)).each do |date| 
    date_counts[date]=0 
end 
date_counts.merge! Item.group("date(created_at)").count 

업데이트

{Sun, 01 May 2011=>0, Mon, 02 May 2011=>0, Tue, 03 May 2011=>0, Wed, 04 May 2011=>0, Thu, 05 May 2011=>0, Fri, 06 May 2011=>0, Sat, 07 May 2011=>0, Sun, 08 May 2011=>0, Mon, 09 May 2011=>0, Tue, 10 May 2011=>0, Wed, 11 May 2011=>0, Thu, 31 Mar 2011=>2, Sun, 03 Apr 2011=>1, Fri, 08 Apr 2011=>643, Sat, 09 Apr 2011=>2360, Sun, 10 Apr 2011=>705, Mon, 11 Apr 2011=>34} 
{Sun, 01 May 2011=>0, Mon, 02 May 2011=>0, Tue, 03 May 2011=>0, Wed, 04 May 2011=>0, Thu, 05 May 2011=>0, Fri, 06 May 2011=>0, Sat, 07 May 2011=>0, Sun, 08 May 2011=>0, Mon, 09 May 2011=>0, Tue, 10 May 2011=>0, Wed, 11 May 2011=>0, Sat, 02 Apr 2011=>1, Fri, 08 Apr 2011=>4158, Sat, 09 Apr 2011=>12206, Sun, 10 Apr 2011=>4279, Mon, 11 Apr 2011=>169} 
{Sun, 01 May 2011=>0, Mon, 02 May 2011=>0, Tue, 03 May 2011=>0, Wed, 04 May 2011=>0, Thu, 05 May 2011=>0, Fri, 06 May 2011=>0, Sat, 07 May 2011=>0, Sun, 08 May 2011=>0, Mon, 09 May 2011=>0, Tue, 10 May 2011=>0, Wed, 11 May 2011=>0} 

확실하지 않음을 일으키는 원인 흠 ... : 나는 그것이 다른 길이 해시를 얻을 이상하게도, 여기에 내 날짜 범위와 모델을 통과 할 때 510,403,210은 여기에 몇 가지 출력됩니다.

+0

흠 .. 나는 '형식 오류 : 배열을 해시로 변환 할 수 없습니다.', '병합!'이 발생했습니다. 이상합니다.이게 무슨 일 이니? –

+0

내가 사용한 Arel 구문이 .count (: group => : created_at)와 같다고 가정했는데, 순서가 지정된 해시를 반환하지만 그와 동일한 것은 아닙니다. –

+0

오 - 대기. 귀하의'.values'를 복사했는데 날짜 키가 없어졌습니다. 편집 중 ... –

관련 문제