Mysql Ruby循环将事物添加到一起
假设我有下表数据Mysql Ruby循环将事物添加到一起,mysql,ruby-on-rails,ruby,Mysql,Ruby On Rails,Ruby,假设我有下表数据 id count 1 5 1 6 2 7 我想在结尾有一个数组{[1,11][2,7]}。我如何才能最有效地做到这一点 到目前为止,我有一些类似于: IDs = Array.new table.each do |t| if !IDs.include? t.id IDs << t.id end end nid整数是我要根据它进行聚合的整数(即,查询将是选择nid、title、section、sum(views)、来自用户的日期,
id count
1 5
1 6
2 7
我想在结尾有一个数组{[1,11][2,7]}。我如何才能最有效地做到这一点
到目前为止,我有一些类似于:
IDs = Array.new
table.each do |t|
if !IDs.include? t.id
IDs << t.id
end
end
nid整数是我要根据它进行聚合的整数(即,查询将是选择nid、title、section、sum(views)、来自用户的日期,其中user_id=?
然后我需要一种方法来传递文章所属的模型(1-many),即用户表
我的article.rb文件中只有属于\u to:user
,user.rb有有\u多篇:article
编辑2:
我在article.rb文件中创建了一个命名范围,名为:sum with lambda{find_by_sql(“Select…)}
现在的问题是如何将通配符放入
WHERE user\u id=?
中,以便只为正确的用户获取文章?现在,我的user\u controller
中有@articles=articles.sum
参数。您始终可以使用以下命令执行任何sql查询:
ActiveRecord::Base.connection.execute('SELECT id, sum(count) FROM table GROUP BY id').values
然而,这并不理想,因为它不是db不可知的。通常这样的查询由模型处理得很好,但是查询结构取决于您的模型是如何定义的,所以在您与我们共享之前,没有更多的帮助
更新:
经过一番讨论,似乎最好的办法是重新设计您的模型。
创建DailyViews model conaining id、article_id和views_count,而不是具有多个具有不同视图计数的文章副本。通过has_many association将其与文章模型关联。然后,您只需调用:
article.daily_views.sum(:views_count)
计算给定文章的所有视图。我可能会将上述内容打包到另一个方法total\u views
。您还可以在新模型上定义范围,这样您就可以更轻松地计算给定月份或年份的视图数
a = Article.select('nid, sum(views) as count').group('nid')
a.inject({})do |res, i |
res[i.status] = i.total
res
end
它会给你类似于{'1'=>'11','2'=>'7'}的结果是的,你可以……如果你运行自己提出的查询,会更简单。我在哪里做呢?model.rb文件中的命名范围?这个表与某个模型关联吗?你的模型结构是什么?是的,在创建表对象的地方发布相关代码。我想,你有一篇文章,其中包含许多日常视图。将你的模型分成两部分模型,一个是文章,第二个是每日视图(带有id、文章id和视图计数)。然后您将能够执行:
article.daily\u views.sum(:views\u count)
,这将生成一个正确的干净sql查询。我将把它放在哪里?放在模型中?不需要,您可以将它放在关注点中,在您想要计算的任何地方建模。
a = Article.select('nid, sum(views) as count').group('nid')
a.inject({})do |res, i |
res[i.status] = i.total
res
end