2012-05-31 18 views
9

は、私が使用しているコードです:MySQLの結果セットをどのように反復処理できますか?ここで

# Run the query against the database defined in .yml file. 
# This is a Mysql::result object - http://www.tmtm.org/en/mysql/ruby/ 
@results = ActiveRecord::Base.connection.execute(@sql_query) 

を私の見解では、ここで私は値を確認するために行うものです。

<pre><%= debug @results %></pre> 
Outputs: #<Mysql2::Result:0x007f31849a1fc0> 

<% @results.each do |val| %> 
    <%= val %> 
<% end %> 
Outputs: ["asdfasdf", 23, "qwefqwef"] ["sdfgdsf", 23, "asdfasdfasdf"] 

だから私はselect * from Personのようなものを照会想像し、それはA返します結果セット:

ID  Name  Age 
1  Sergio 22 
2  Lazlow 28 
3  Zeus  47 

どのように各値を反復して出力できますか?

おそらく存在するメソッドを試したが、インタプリタがこれらのメソッドが存在しないというエラーを表示するため、ここのドキュメントは役に立ちません。間違った文書を使用していますか?

http://www.tmtm.org/en/mysql/ruby/

ありがとう!

答えて

23

あなたは、あなたがmysql2結果オブジェクトを取得する必要がありますし、ドキュメントに応じてあなたにhere

したがって、次の

results.each do |row| 
    # conveniently, row is a hash 
    # the keys are the fields, as you'd expect 
    # the values are pre-built ruby primitives mapped from their corresponding field types in MySQL 
    # Here's an otter: http://farm1.static.flickr.com/130/398077070_b8795d0ef3_b.jpg 
end 

チェックアウトにドキュメントを行うことができるはずmysql2の宝石を使用している場合場合は、次の

<% @results.each do |val| %> 
    <%= "#{val['id']}, #{val['name']}, #{val['age']}" %> 
<% end %> 

編集を行うことができます:あなたがあるように見えます間違ったドキュメントを参照して、Mysql2 gemsのドキュメントを確認してください。

+0

ありがとうございました!私は間違ったドキュメントを読んでいるとは信じられません。 :) –

+5

おそらく働いて休憩を取る。 – Josnidhin

+1

Nice otter .... – RTF

2

使用:as => :hash

raw = ActiveRecord::Base.connection.execute(sql) 
raw.each(:as => :hash) do |row| 
    puts row.inspect # row is hash 
end 
+0

'.each'だけでなく'(:as =>:hash) 'を使う利点は何ですか? – Termato

+1

@Termato私のラップトップ(Windows 7)、Rails 3では、 'row'をハッシュとして出力しないので、明示的に'(:as:>:hash) 'を追加します。もしも動作すれば完全に '.each'を使うことに同意してください:) – coderz

+0

ありがとう、とても役に立ちます。 – Termato

6

あなたが(3.1+レールで利用可能)ActiveRecord::Resultを返すActiveRecord::Base.connection.exec_query代わりのActiveRecord::Base.connection.executeを使用して試みることができる

次にあなたが.rows.eachなど、さまざまな方法でそれにアクセスすることができ、または.to_hash

docs

result = ActiveRecord::Base.connection.exec_query('SELECT id, title, body FROM posts') 
result # => #<ActiveRecord::Result:0xdeadbeef> 


# Get the column names of the result: 
result.columns 
# => ["id", "title", "body"] 

# Get the record values of the result: 
result.rows 
# => [[1, "title_1", "body_1"], 
     [2, "title_2", "body_2"], 
     ... 
    ] 

# Get an array of hashes representing the result (column => value): 
result.to_hash 
# => [{"id" => 1, "title" => "title_1", "body" => "body_1"}, 
     {"id" => 2, "title" => "title_2", "body" => "body_2"}, 
     ... 
    ] 

# ActiveRecord::Result also includes Enumerable. 
result.each do |row| 
    puts row['title'] + " " + row['body'] 
end 
1

列ヘッダーの@ results.fieldsを探します。

例:@results = [1、 "セルジオ"、22]、[2、 "ラズロウ"、28]、[3、 "ゼウス"、47]]

@results.fields do |f| 
    puts "#{f}\t" # Column names 
end 

puts "\n" 

@results.each do |rows| # Iterate through each row 
    rows.each do |col| # Iterate through each column of the row 
    puts "#{col}\t" 
    end 
    puts "\n" 
end 

はそれがホープ役に立った

関連する問題