![](/img/trans.png)
[英]rails-5 activerecord postgresql-9.6 enable_nestloop for a single sql query
[英]Insert records and update count in single query postgresql 9.6
我有两个表的users
和products
。 我在一个查询中插入20,000条记录,但是我又想将users
表的products_count
属性中的产品计数保存到同一事务中。 同样,如果有任何产品删除给用户,那么它也需要更新计数。
这就是我一次插入20k条记录的方式:
product_ids.each { |product_id| attrs << "('#{product_id}','#{user_id}','#{Time.now.utc}')" }
products_sql = "INSERT INTO products(product_id, user_id, created_at) VALUES #{attrs.join(', ')}"
ActiveRecord::Base.connection.execute(products_sql)
这正在成功发生。 但是,如果可能的话,如何使用相同的查询将计数更新到用户表中?
一种方法是,我只使用Rails
更新方法来更新计数。
更新结束后,您可以执行查询以重新计算产品数量。 就像是
update
users
set
users.product_count=(select count(products.id) from products where products.user_id=users.id)
我知道您在同一查询中需要它,但是下面可能会完成您正在寻找的东西。 初次插入后使用
product_ids.each { |product_id| attrs << "('#{product_id}',' {user_id}','#{Time.now.utc}')" }
products_sql = "INSERT INTO products(product_id, user_id, created_at) VALUES #{attrs.join(', ')}"
ActiveRecord::Base.connection.execute(products_sql)
product_count = product_ids.size
users_sql = "INSERT INTO users(product_count) VALUES #{product_count}"
ActiveRecord::Base.connection.execute(users_sql)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.