我目前有這個工作,但必須有更好的方法。我有一個模型,用於查詢外部oracle數據庫視圖。在這種特殊情況下,我必須對每個id值運行一個查詢,並將這些結果組合到一個數組中。結合ActiveRecord ::結果.each循環
這可以工作,但它需要在數組上進行相當多的維護才能以更易於使用的格式獲取信息。希望有一種方法來簡化這個:
def self.count_by_year(ids, year)
start_date = DateTime.strptime(year.to_s, "%Y").strftime("%Y%m%d")
end_date = DateTime.strptime(year.to_s, "%Y").end_of_year.strftime("%Y%m%d")
bulk_issues = []
if ids.size > 1
ids.each do |uc|
bulk_issues << (External.connection.select_all "SELECT COUNT(*) FROM DB WHERE ID='#{uc.id}' AND GROUP_NAME != 'CA' AND STATUS != 'Cancelled' AND (DATE_OPENED BETWEEN '#{start_date}' AND '#{end_date}')")
end
else
bulk_issues << (External.connection.select_all "SELECT COUNT(*) FROM DB WHERE ID='#{ids.first.id}' AND GROUP_NAME != 'CA' AND STATUS != 'Cancelled' AND (DATE_OPENED BETWEEN '#{start_date}' AND '#{end_date}')")
end
return bulk_issues
end
當叫這個返回如下:
[#<ActiveRecord::Result:0x007fdafd95ec20 @columns=["count(*)"], @rows=[[51]], @hash_rows=nil, @column_types={}>, #<ActiveRecord::Result:0x007fdafd95d320 @columns=["count(*)"], @rows=[[19]], @hash_rows=nil, @column_types={}>]
當扁平返回:
[{"count(*)"=>51}, {"count(*)"=>19}]
這是一種痛苦提取數據因爲我必須將這些值拉出來並將它們放入一個新的數組中,以便將其格式化爲我正在使用的值。
我所試圖做的就是功能的陣列中返回數據如下:
[51, 19]
任何幫助將不勝感激!
您在進行原始查詢時要特別小心,以避免在查詢中注入任何有害內容。使用佔位符使這些顯着更安全。 – tadman