0
我有一个用来存储商人报价(价格,评论,日期雇主接受这个报价......)的表格,积极/消极,评论,日期评级已提交,...)的每个商人。所以,一个商人可以有0..n的引号和0..n的评级。ruby/mysql:查询只返回一个用户,而不是许多用户
我想了解一下:
- 多少收视率做了商人,当了他的报价是由雇主接受?
我目前的做法:
首届查询(“引号”)是找出quoters的用户ID,并在此期限雇主接受了报价。
第二个查询('ratings')在一个块内。对于每个商人ID,查询应获取与报价接受日期相同或相似的评级。
问题:
- 第二届查询获取只能从一个用户的收视率,但它应该从约70得到用户的收视率。任何人都有一个想法,查询有什么问题?
代码:
#!/usr/bin/ruby
require "mysql"
begin
db_q = Mysql.real_connect("localhost", "root", "", "my_db")
quotes = db_q.query("
SELECT q.user_id, q.accepted_at
FROM quotes q
INNER JOIN jobs j ON q.job_id = j.id
INNER JOIN categories_jobs cj ON j.id = cj.job_id
INNER JOIN categories c ON cj.category_id = c.id
INNER JOIN users u ON j.user_id = u.id
WHERE q.accepted_at IS NOT NULL
AND c.id = 8
")
db_r = Mysql.real_connect("localhost", "root", "", "my_db")
quotes.each do |quote|
ratings = db_r.query("SELECT * FROM ratings WHERE assessee_id = #{quote[0]} AND CAST(created_at as DATE) <= '#{quote[1]}'")
ratings.each do |rating|
printf "%s, %s, %s, %s, %s, %s\n", rating[0], rating[2], rating[3], rating[4], rating[5], rating[6]
end
end
ratings.free
quotes.free
rescue Mysql::Error => e
puts "Error code: #{e.errno}"
puts "Error message: #{e.error}"
puts "Error SQLSTATE: #{e.sqlstate}" if e.respond_to?("sqlstate")
ensure
# disconnect from server
db_q.close if db_q
db_r.close if db_r
end
这是MySQL,所以续集可以减少它。获取真正的@hebe,如果你不能写这个查询,请使用一些帮助。 – three 2012-01-12 14:27:41
由于查询只返回1个用户的结果,我认为一个返回所有用户的解决方案并不遥远。 @three有关如何将它与续集剪下来的提示? – hebe 2012-01-12 14:41:40
@Paul Rubel:我从制作中做了一个转储,试图用Sequel Pro对我的数据进行一些评估。这就是为什么我坚持原始的SQL到目前为止..我实际上从来没有使用Active Record除了Rails。 – hebe 2012-01-12 14:43:04