mysql - 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

然后我想按照 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/

相关文章:

ruby - 如何避免来自 RubyGems 的弃用消息?

mysql - 我在 MySQL 中有 4 个表 - 与第 4 个表连接,没有重复项(可能为空值)

MySQL 计算从 1 到 0 的连续值的个数

ruby-on-rails - Rails 3 - 如何构建包含大量数据的数据库表?

mysql - rails : using set_table_name to join across different databases on the same mysql server

mysql - 我应该使用 SQL 还是 Ruby 处理大量数据?

ruby-on-rails - 是否有一种优雅的单行代码可以使用 .send() 附加存储在数组中的范围?

php - Wordpress 从帖子表中获取类别

php - 查找最低可用功能

ruby-on-rails - Rails中tableize和下划线之间的区别