Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Ruby循环将事物添加到一起_Mysql_Ruby On Rails_Ruby - Fatal编程技术网

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