假设我有以下表格数据
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
然后我想按照 IDs.each do |i|
的思路进行操作并将其添加到临时变量...然后最终返回一个二维数组。
有没有更简单的方法?这一切都来自 mysql 数据库,所以我怎么能运行类似 SELECT id, sum(count) FROM table GROUP BY id
的东西呢?在 ruby on Rails 应用程序中?
编辑:
这是创建文章表的迁移
class CreateArticles < ActiveRecord::Migration
def change
create_table :articles do |t|
t.integer "nid"
t.string "title"
t.string "section"
t.integer "views"
t.date "date"
t.integer "user_id"
end
end
end
nid 整数是我想要聚合它的基础(即查询将是 SELECT nid, title, section, sum(views), date FROM users WHERE user_id=?
然后我需要一种方法来传递文章所属的模型(1-many),即用户表。
我的article.rb文件只有belongs_to :user
其中 user.rb 有 has_many :articles
编辑2:
我在我的article.rb文件中创建了一个命名范围,名为:sum with lambda {find_by_sql("Select .... ")}
现在的问题是如何将通配符放入 WHERE user_id = ?
中这样我就只抓取正确用户的文章?现在我的user_controller
有@articles = Articles.sum
其中的参数。
最佳答案
您始终可以使用以下方式执行任何 SQL 查询:
ActiveRecord::Base.connection.execute('SELECT id, sum(count) FROM table GROUP BY id').values
然而,这并不理想,因为它与数据库无关。通常,模型可以很好地处理此类查询,但是查询结构取决于模型的定义方式,因此在您与我们分享这些查询之前,没有更多帮助。
更新:
经过一番讨论,似乎最好的方法是重新设计模型。 创建包含 id、article_id 和views_count 的 DailyViews 模型,而不是使用不同 view_counts 的文章进行多个重复。通过 has_many 关联将其与 Article 模型关联。然后你可以简单地调用:
article.daily_views.sum(:views_count)
计算给定文章的所有 View 。我可能会将以上内容包装到另一个方法total_views中。您还可以在新模型上定义范围,这样您就可以更轻松地计算给定月份或年份的观看次数。
关于mysql - Ruby 循环将事物添加到一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21862003/