2012-02-15 2 views
0

나는 데이터베이스 작업을 위해 ruby ​​mysql2 gem을 사용하고있다. 지역별 모든 국가를 하나의 표에 나열한 다음 지역 당 히트 수를 합산하려고합니다.루비와 함께 여러 배열에 숫자 추가하기

일반적으로 나는 mysql SUM 함수를 사용할 것이지만 보석은 헤더를 반환하므로 불가능합니다.

대신 지역 당 각 국가별로 조회수가 증가하고 있습니다. 보석은 결과마다 1 개의 배열을 반환하므로 결과를 가져 와서 영역 당 누적 합계에 추가해야합니다.

이 내 코드입니다 :

#!/usr/bin/ruby -w 
# simple.rb - simple MySQL script using Ruby MySQL module 

require "rubygems" 
require "mysql2" 

client = Mysql2::Client.new(:host => "localhost", :username => "root", :database => "cbscdn") 
regions = client.query("select Id from Regions") 

regions.each(:as => :array) do |rid| 
    hit = client.query("select hits from Countries where Regions_Id='#{rid}'") 
    hit.each(:as => :array) do |a| 
    a.map do |x| 
     x.to_i 
    end 
    end 
end 

이 어떻게 지역 당 실행 수를 구현할 수있다?

+0

각 배열을 픽스 넘으로 바꾸고 새 배열에 추가 한 다음 배열의 모든 값을 추가하여 결과를 가져와야했습니다. – jhgfds

답변

0

어떤 이유로 당신이 원하지 않는 경우 : 당신이 countries 테이블에없는 지역에 대한 금액을 원하는 경우

client.query(%q{ 
    select regions_id, sum(hits) 
    from countries 
    group by regions_id 
}).each(:as => :array) do |row| 
    region_id, total_hits = row 
    #... 
end 

을 그리고 데이터베이스 엔진에 위임하려면 다음과 같이하면됩니다. (간단히하기 위해 결과는 이미 배열이라고 가정합니다)

regions_count = regions.inject({}) do |hash, rid| 
    hit = client.query("whatever") 
    hash[rid] = hit.map(&:to_i).inject(0, :+) 
    hash 
end 
+0

귀하의 사례가 도움이되었습니다. 감사. – jhgfds

2

데이터베이스 작업하자 :

client.query(%q{ 
    select r.id, coalesce(sum(c.hits), 0) 
    from regions r 
    left outer join countries c 
    on r.id = c.regions_id 
    group by r.id 
}).each(:as => :array) do |row| 
    region_id, total_hits = row 
    #... 
end 
+0

"일반적으로 mysql SUM 함수를 사용 하겠지만 보석은 헤더를 반환하므로 불가능합니다." mysql 함수는 합계와 함께 cli를 사용하면서 헤더를 반환합니다. 결과는 유효하지 않습니다. – jhgfds

+0

@willejs : 그게 무슨 의미인지 또는 MySQL CLI와 관련이 있는지 이해할 수 없습니다. –

+0

만약 내가 mysql2 gem을 사용하고 그 쿼리를한다면, 나는 결과를 얻지 만, 헤더와 포맷을 배열로 완성하여 결과를 읽을 수 없게 만든다. – jhgfds

관련 문제