所以,我有一个问题.我有一个查询,它从一个表(例如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-on-rails – Nginx支持的Rails应用程序中缺少Content-Length Header 2023-09-20
 - R语言histogram(直方图)的具体使用 2022-10-28
 - R语言使用gganimate创建可视化动图 2022-12-10
 - go语言的魔幻旅程14-反射 2023-09-05
 - Go语言实现一个Http Server框架(二) Server的抽象 2023-07-25
 - R语言多元线性回归实例详解 2022-12-15
 - golang 自然语言处理工具(gohanlp) 2023-09-05
 - R语言学习代码格式一键美化 2022-12-05
 - R语言关联规则深入详解 2022-11-08
 
    	
    	
    	
    	
    	
    	
    	
    	
						
						
						
						
						
				
				
				
				