0
使用ActiveRecord我提出這個查詢的ActiveRecord + SQLite的3行爲異常
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服務器中沒有發生?
我實現了第一個查詢具有AdImage在前面,所以它爲什麼給AdImage列只(AdImage和AdCampaign都有CLICK_URL,我忘了,讓我感到困惑。)但是第二個問題還是需要一個很自然回答。 – nextofsearch 2012-01-16 06:16:40
SQLite 3似乎返回索引值和列名稱的結果,我猜儘管MySql返回只與列名稱resultes。 – nextofsearch 2012-01-16 06:21:02