我試圖限制我執行mysql查詢的次數,因爲這可能最終導致2k +查詢只是爲了實現相當小的結果。在已經檢索到的mysql結果中搜索
我正在瀏覽一個CSV文件,我需要檢查csv中的內容格式是否符合db的預期格式,有時我會嘗試完成一些基本的清理工作(例如,I有一個字段是一個字符串,但有時在csv中是jb2003-343,我需要刪除-343)。
我做的第一件事就是從數據庫中獲取我需要從csv中檢索的字段列表,然後獲取csv中這些列的索引,然後檢查csv中的每一行並得到每個索引列
get_fields = BaseField.find_by_group(:all, :conditions=>['group IN (?)',params[:group_ids]]) csv = CSV.read(csv.path) first_line=csv.first first_line.split(',') csv.each_with_index do |row| if row==0 col_indexes=[] csv_data=[] get_fields.each do |col| col_indexes << row.index(col.name) end else csv_row=[] col_indexes.each do |col| #possibly check the value here against another mysql query but that's ugly csv_row << row[col] end csv_data << csv_row end end
的問題是,當我加入了csv_data輸出的內容,我不再有原來的get_fields查詢的任何連接。因此,我似乎無法說'這是否與數據庫預期的數據類型匹配'。
我可以工作,我回來的路上經過這讓我到那個水平相同的過程,並作出這樣
get_cleanup = BaseField.find_by_csv_col_name(first_line[col]) if get_cleanup.format==row[col].is_a csv_row << row[col] else # do some data clean-up end
另一個查詢,但正如我所說,這可能意味着該get_cleanup運行2000+次。
而不是這樣做,有沒有辦法在原始的get_fields結果中搜索名稱,然後獲取關聯的字段?
我試着搜索'搜索欄對象',但不斷搜索有關構建搜索的結果,而不是在現有對象內搜索。
我知道我可以做array.search,但沒有看到關於搜索的對象api中的任何東西。
注意:上面的代碼可能並不完美,因爲我還沒有運行它,只是寫下了我的頭頂,但希望它給你我想要的東西的想法。