###前提・実現したいこと
RubyでMySQLで作ったデータベースにqueryをかけています。
その中で、2つの文に対してqueryをかけたいのですが、書き方が分かりません。
具体的に言うと、
2つのテーブルを結合してから、1つになったテーブルをselectするという動作に対してqueryをかけるようなプログラムを書きたいと思っています。
テーブル名を【】、フィールド名を[]で区別して書きます。
2つのテーブルは以下の通りです。
【combination】
[id] = 1
[box1] = "ほげ"
[box2] = "ほげほげ"
[merit] = 1
【merit】
[id] = 1
[merit] = "とても素晴らしい"
"完了済みの作業"
【combination】を参照して、[box1]とb1(任意の文字列)かつ[box2]とb2(任意の文字列)が一致した場合、その行の[merit]だけを出力しています。[merit]の値は「1」など数字が入っています。
[id] = 1
[box1] = "ほげ"
[box2] = "ほげほげ"
[merit] = 1
b1 = "ほげ"、b2 = "ほげほげ"だった場合、
htmlでは「1」と表示されています。
"問題の作業"
それは【merit】と【combination】を結合する動作を上の作業と同時に行うことです。【merit】の[id]が【combination】の[merit]の値とリンクしていて、
【combination】
[id] = 1
[box1] = "ほげ"
[box2] = "ほげほげ"
[merit] = "とても素晴らしい"
上記のように【merit】の[merit]の値を結合させて、htmlで"とても素晴らしい"というメッセージが表示されるようにしたいと考えています。
###発生している問題・エラーメッセージ
上記で述べている通りです。
###該当のソースコード
b1 = "ほげ"
b2 = "ほげほげ"
client = Mysql2::Client.new(host:'localhost', database:'value', username:'----', password:'----')
query = %q{select * from combination where box1 like }
query = query + "'#{b1}'"
query = query + %q{and box2 like }
query = query + "'#{b2}'"
results = client.query(query)
results.each do |row|
print row["merit"]
end
###試したこと
query = %q{select combination.id, merit.merit, demerit.demerit from combination join merit on combination.merit=merit.id join demerit on combination.demerit=demerit.id intersect}
query = query + %q{select * from combination where box1 like }
query = query + "'#{b1}'"
query = query + %q{and box2 like }
query = query + "'#{b2}'"
上のように書き換えて実行しましたが、値を取得できませんでした。
アドバイスお願い致します。
###補足情報(言語/FW/ツール等のバージョンなど)
Ruby, MySQL
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/17 07:26