使用activerecord我做了这个查询
AdImage.select("ad_images.id, ad_images.locale_id, ad_campaigns.click_url,
ad_campaigns.default_ad_image_id").joins("left outer join ad_campaigns on
ad_campaigns.id = ad_images.ad_campaign_id").where("ad_images.ad_campaign_id" => 1)
生成以下sql查询:
SELECT ad_images.id, ad_images.locale_id, ad_campaigns.click_url,
ad_campaigns.default_ad_image_id FROM "ad_images" left outer join ad_campaigns on
ad_campaigns.id = ad_images.ad_campaign_id WHERE "ad_images"."ad_campaign_id" = 1
,结果如下:
=> [#<AdImage id: 22, click_url: "market://details?id=com.mobiata.flighttrack",
locale_id: 2>]
这是错误的。
所以我使用ActiveRecord :: Base.connection.execute方法直接运行sql查询:
ActiveRecord::Base.connection.execute("SELECT ad_campaigns.click_url, ad_images.id,
ad_images.locale_id, ad_campaigns.default_ad_image_id FROM ad_campaigns inner join
ad_images on ad_campaigns.id = ad_images.ad_campaign_id WHERE ad_images.ad_campaign_id = 1")
返回以下内容:
[{"click_url"=>"market://details?id=com.mobiata.flighttrack", "id"=>22, "locale_id"=>2,
"default_ad_image_id"=>22, 0=>"market://details?id=com.mobiata.flighttrack", 1=>22,
2=>2, 3=>22}]
里面有奇怪的重复。
第一个和第二个之间的唯一区别是“ad_images”与表名中的ad_images。
我的问题是:
1)我不明白是什么造成了这种差异。
2)为什么第二个查询在SQLite3中返回垃圾,而在MySQL服务器中却没有?
答案 0 :(得分:0)
我最终使用“ActiveRecord :: Base.connection.execute”而不是使用Rails的ActiveRecord助手。似乎没有其他解决方案。
事实证明,在调用值时,应使用索引值而不是双引号列名。否则,在使用MySQL进行生产时,您将遇到类型错误。