我有两张表users
和products
。我在一个查询中插入了20,000条记录,但我又要将products_count
表中的users
属性中的产品计数保存到同一个事务中。此外,如果用户有任何产品删除,则还需要更新计数。
这就是我一次插入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
更新方法来更新计数。
答案 0 :(得分:0)
在更新结束时,您可以执行查询以重新计算产品数量。像
这样的东西update
users
set
users.product_count=(select count(products.id) from products where products.user_id=users.id)
答案 1 :(得分:0)
我知道你想在相同的查询中使用它,但下面可能会完成你想要的。在初始插入后使用此
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)