2011-05-12 4 views
0

나는 약간의 도움이 필사적으로 필요합니다. 데이터 파일에 대한 기본 분석을 수행하기 위해 우리 팀 중 한 팀을위한 유틸리티를 함께 사용하도록 임무를 부여 받았습니다. 나는 지금 당분간 매일 매일 코딩을하고 있었으므로 조금 녹슬었다. 나는 내 문제를 간결하게 설명하려고 노력할 것이다.단일 ActiveRecord 모델의 복잡한 그룹화

시나리오 : 목록 운영 팀은 전자 메일 마케팅 캠페인을위한 데이터 파일을 만듭니다. 마케팅 캠페인은 여러 세그먼트로 나뉩니다. 각 세그먼트는 키 코드로 식별됩니다. 총 레코드 수는 평균 약 450,000이고 파일 크기는 약 20MB입니다.

마케팅 부서에서 gmail, yahoo 및 hotmail 주소가 포함 된 레코드 수에 대한 기본적인 분석을 세그먼트 단위로 수행하려고합니다.

현재 상태 : 사용자가 여러 파일을 업로드하고 해당 레코드를 MySQL 데이터베이스에 저장할 수있는 레일 3 응용 프로그램이 생성되었습니다.

다음은 데이터베이스 레코드 표준 ID와 같은 필드와 타임 스탬프를 포함하지 않는, 어떻게 보이는지의 아주 기본적인 샘플입니다 :

domain  eid keycode 
YAHOO.COM 42886 GY4103 
HOTMAIL.COM 53012 GY4103 
YAHOO.COM 53952 GY4103 
AOL.COM  54327 GY4103 
COMCAST.NET 55134 MX4155 
GMAIL.COM 59157 MX4155 
AOL.COM  59823 MX4155 
AOL.COM  60384 MX4161 
MSN.COM  64720 MX4161 
YAHOO.COM 67790 MX4161 
GMAIL.COM 73537 MX4161 
YAHOO.COM 76747 MX4161 
HOTMAIL.COM 71467 MX4161 
GMAIL.COM 84280 MX4161 

문제 : 최종 사용자로에 분석을 제시해야 : 나는 크리스탈 리포트 같은에 있다면

Keycode 
GY4103 
    Domain  Count 
    YAHOO.COM 2 
    HOTMAIL.COM 1 
    OTHER  1 
MX4155 
    Domain  Count 
    GMAIL.COM 1 
    OTHER  2 
MX4161 
    Domain  Count 
    YAHOO.COM 2 
    HOTMAIL.COM 1 
    GMAIL.COM 2 
    OTHER  2 

, 나는 키 코드로 불과 그룹, 다음 다음 도메인 및 그 아래에있는 이드의의의 수에 의해, 내가 원하는 단지 3 개 도메인을 보여주기 위해 일부 조정을 할 것 언제 까지나 "다른 것"으로 다른 것을 끝내라. 그러나 여기서 CR을 사용하는 것은 불가능합니다.

그래서 저는 최상위 수준의 Keycode를 사용하여 몇 가지 유형의 트리 구조 또는 계층 구조를 만든 다음 그 아래의 도메인과 그 아래의 개수를 가정하고 있습니다. 나는 조상 보석을 살펴보기 시작했으나 실제로 얻지는 못했습니다.

누구든지 제공 할 수있는 도움이 있으면 감사하겠습니다. 특히 내일 정오까지이를 제공해야한다고 생각하면 더욱 좋습니다.

답변

2

처리 할 큰 데이터 세트 인 것처럼 보이기 때문에 아마도 약간의 수동 SQL을 혼합 할 것입니다. 이 같은 아마 뭔가 :

# CONTROLLER 
# Load the data from the database and group on keycode and domain. 
# You will only get one record for each unique combination of domain and keycode 
@records = MyModel.select("keycode, domain, COUNT(eid) AS eids").group("keycode, domain") 

# convert the array of records into a hash where every key is a unique keycode 
# and the value is an array of records for all the domains for that keycode 
@records = @records.group_by(&:keycode) 

# VIEW 
<% @records.keys.each do |keycode| %> 
    <h1><%= keycode %></h1> 
    <% @records[keycode].each do |record| %> 
    <p><%= record.domain %>: <%= record.eids %></p> 
    <% end %> 
<% end %> 

나는 당신이 죽은 제대로

+0

모든 것을 이해 바랍니다! 지금은 너무 단순 해 보인다! 어쨌든, 도움을 주셔서 감사합니다 ... 단지 그것을 가치가 4 시간의 수면을 얻는 :) –

관련 문제