Mysql 如何基于查询插入多行?
我正在开发一个具有文件夹、组和权限的系统。权限决定不同组在每个文件夹中可以执行的操作。因此,每当我创建一个新组时,我都希望在每个文件夹的权限表中添加一条记录,描述新组在该文件夹中可以执行的操作 目前,我正在系统中的所有文件夹中循环,并为每个文件夹添加权限记录:Mysql 如何基于查询插入多行?,mysql,ruby-on-rails,activerecord,ruby-on-rails-3,Mysql,Ruby On Rails,Activerecord,Ruby On Rails 3,我正在开发一个具有文件夹、组和权限的系统。权限决定不同组在每个文件夹中可以执行的操作。因此,每当我创建一个新组时,我都希望在每个文件夹的权限表中添加一条记录,描述新组在该文件夹中可以执行的操作 目前,我正在系统中的所有文件夹中循环,并为每个文件夹添加权限记录: group = Group.create(params) Folder.all.each do |folder| Permission.create! do |permission| permission.folder =
group = Group.create(params)
Folder.all.each do |folder|
Permission.create! do |permission|
permission.folder = folder
permission.group = group
permission.can_create = true
permission.can_read = true
permission.can_update = true
permission.can_delete = true
end
end
我不喜欢每次创建一个新组时都要循环浏览所有记录的事实。因此,基本上我正在寻找一种优雅的方法来使用ActiveRecord执行以下SQL
INSERT INTO permissions (folder_id, group_id, can_creat, can_read, can_update, can_delete)
SELECT id, #{group.id}, true, true, true, true
FROM folders
我想我可以使用find\u by\u sql
运行上面的查询,但这感觉不对,因为我是插入
,而不是选择
或者我应该忘记这一点,继续循环我的文件夹记录,就像上面的例子一样
提前感谢。您是在寻找最“红宝石般优雅”的做事方式,还是最快的?为什么不直接从activerecord调用SQL查询?另一个解决方案是将查询放入数据库函数中,并从web应用程序调用该函数。也许维护起来有点困难,但性能却有了惊人的提升,尤其是当你的web应用程序中有很多文件夹时。你在寻找最“红宝石般优雅”的做事方式,还是最快的?为什么不直接从activerecord调用SQL查询?另一个解决方案是将查询放入数据库函数中,并从web应用程序调用该函数。也许维护起来有点困难,但性能却有了惊人的提升,尤其是当你的web应用中有很多文件夹时。这就是我在rails/activerecord中处理自定义sql的方法(包括创建技巧之后!)
类组 sql=这就是我在rails/activerecord中处理自定义sql的方式(包括创建技巧之后!)
类组ar扩展
使用以下命令安装gem
sudo gem install ar-extensions
将gem包含在environment.rb中(或直接包含在要插入的模型中)
并在一个insert
查询中使用
fields = [:first_name, :last_name, :email]
data = [["glenn", "gillen", "foo@bar.com"],
["john", "jones", "jim@bar.com"],
["steve", "smith", "bar@foo.com"]]
User.import fields, data
您也可以使用ActiveRecord对象来完成
data = [
User.new(:first_name => 'glenn', :last_name => 'gillen', :email => 'foo@bar.com'),
User.new(:first_name => 'john', :last_name => 'jones', :email => 'jim@bar.com'),
User.new(:first_name => 'steve', :last_name => 'smith', :email => 'bar@foo.com')
]
User.import fields, data
在用户表中插入了3个新行,仅使用单个查询强>
关于它的更多信息,以及。您正在寻找的是ar扩展
使用以下命令安装gem
sudo gem install ar-extensions
将gem包含在environment.rb中(或直接包含在要插入的模型中)
并在一个insert
查询中使用
fields = [:first_name, :last_name, :email]
data = [["glenn", "gillen", "foo@bar.com"],
["john", "jones", "jim@bar.com"],
["steve", "smith", "bar@foo.com"]]
User.import fields, data
您也可以使用ActiveRecord对象来完成
data = [
User.new(:first_name => 'glenn', :last_name => 'gillen', :email => 'foo@bar.com'),
User.new(:first_name => 'john', :last_name => 'jones', :email => 'jim@bar.com'),
User.new(:first_name => 'steve', :last_name => 'smith', :email => 'bar@foo.com')
]
User.import fields, data
在用户表中插入了3个新行,仅使用单个查询强>
更多信息,以及。谢谢您的回答。我想最简单的方法是从ActiveRecord调用SQL。我以前使用过find\u by_-sql
,但它似乎不合适,因为我不是选择
,而是插入
。如果您有任何代码示例,我将不胜感激。与此同时,我将开始一个小赏金,看看我是否能得到更多的建议。谢谢你的回答。我想最简单的方法是从ActiveRecord调用SQL。我以前使用过find\u by_-sql
,但它似乎不合适,因为我不是选择
,而是插入
。如果您有任何代码示例,我将不胜感激。与此同时,我将开始一个小赏金,看看我是否可以得到更多的建议。谢谢,听起来像我在寻找的!我明天会看它,如果它能满足我的需要,我会给你赏金。这对ruby/rails的大规模插入非常有用。但是,您基本上希望从另一个表中插入mass。johno似乎是对的。这似乎不符合我上面所描述的。对不起,看来我不得不接受约翰诺的回答。谢谢,听起来像是我要找的!我明天会看它,如果它能满足我的需要,我会给你赏金。这对ruby/rails的大规模插入非常有用。但是,您基本上希望从另一个表中插入mass。johno似乎是对的。这似乎不符合我上面所描述的。对不起,看来我得同意约翰诺的回答了。谢谢。我看过ar扩展,你是对的:它不允许我基于查询导入记录。我会接受你的回答,给你赏金,但我还有一个问题。我希望这个应用程序能够处理不同类型的数据库,Rails的布尔数据类型在MySQL中变成tinyint(1)。因此,从文件夹
中选择id、{id}、'true'、'true'、'true'、'true'、'true'将失败,因为MySQL期望的是0
或1
,而不是true
或false
。有什么建议吗?谢谢。我看过ar扩展,你是对的:它不允许我基于查询导入记录。我会接受你的回答,给你赏金,但我还有一个问题。我希望这个应用程序能够处理不同类型的数据库,Rails的布尔数据类型在MySQL中变成tinyint(1)。因此,从文件夹中选择id、{id}、'true'、'true'、'true'、'true'、'true'将失败,因为MySQL期望的是0
或1
,而不是true
或false
。有什么建议吗?