所以,我有一个问题.我有一个查询,它从一个表(例如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查询中传递数组


- Ruby on Rails在Ping ++ 平台实现支付 2023-07-22
- Ruby的字符串与数组求最大值的相关问题讨论 2023-07-22
- R语言关于二项分布知识点总结 2022-11-30
- R语言绘图数据可视化pie chart饼图 2022-12-10
- R语言-如何切换科学计数法和更换小数点位数 2022-11-23
- Ruby 迭代器知识汇总 2023-07-23
- Swift超详细讲解指针 2023-07-08
- 汇编语言程序设计之根据输入改变屏幕颜色的代码 2023-07-06
- Go Web开发进阶实战(gin框架) 2023-09-06
- Golang http.Client设置超时 2023-09-05