所以,我有一个问题.我有一个查询,它从一个表(例如table1)返回ID,我必须将这些ID传递给另一个使用table2的查询. (由于某些原因,不能选择内部选择或联接).查询:client = Mysql2::Client.new(:host = localhost, :...
所以,我有一个问题.我有一个查询,它从一个表(例如table1)返回ID,我必须将这些ID传递给另一个使用table2的查询. (由于某些原因,不能选择内部选择或联接).
查询:
client = Mysql2::Client.new(:host => "localhost", :username => "", :password => "", :database =>"test")
query1 = %Q{select id from table1 where code='ABC123'}
ids = client.query(query1)
query2 = %Q{select * from table2 where `table2`.`table1_id` IN (#{ids}) and status="rejected"}
table2_data = client.query(query2)
ids是Mysql2 :: Result类型
另外,当我执行ids.to_a时,结果数组具有类似以下数据:[{“ id” => 1},{“ id” => 2}]
我需要一些可行的方法来将ID传递给第二个查询.我尝试了ids.to_a,但是由于括号[]导致错误.我也尝试过串联,说MySQL结果是:
array = ids.to_a # [1,2,3]
id_new = "("+#{array.join(',')}+")"
id_new变成字符串的“(1,2,3)”,因此IN不起作用.
任何人都可以建议一些如何在原始MySQL查询中传递ID数组的方法吗?
我已经不知所措了,但找不到合适的答案.
编辑:我只能将Active Record用于query1,如果是这种情况,并且id是Active Record对象,那么谁能建议如何在应该是原始SQL查询的IN子句中将其传递给query2?
Edit2:我不能使用Active Record(用于query2)或联接,因为它使查询变得繁重,并且花费很长时间(> 10s)来获取结果(存在索引).因此,我正在使用原始查询对其进行优化.
解决方法:
您确定它不起作用是因为它是一个字符串.我认为由于括号重复而无法使用.请尝试以下方法:
array = ids.flat_map(&:values).join(',')
query2 = %Q{select * from table2 where `table2`.`table1_id` IN (#{array}) and status="rejected"}
我建议使用ORM (object-relational mapping),例如ActiveRecord或Sequel gems-尤其是因为通过字符串填充手动构建数据库查询容易出错,并且会导致诸如sql注入之类的漏洞.
本文标题为:在Ruby on Rails中的原始MySQL查询中传递数组
基础教程推荐
- asm基础——汇编指令之in/out指令 2023-07-06
- swift版webview加载网页进度条效果 2023-07-05
- Go web部署报错panic: listen tcp xxxxxxx:8090: bind: cannot assign requested address 2023-09-05
- R语言基于Keras的MLP神经网络及环境搭建 2022-12-10
- R包ggtreeExtra绘制进化树 2022-12-14
- R语言-如何将科学计数法表示的数字转化为文本 2022-11-23
- R语言数可视化Split violin plot小提琴图绘制方法 2022-12-10
- ruby-on-rails-使用Nginx的Rails的多阶段环境 2023-09-21
- UEFI开发基础HII代码示例 2023-07-07
- swift 字符串String的使用方法 2023-07-05