2014-10-17 39 views
0

使用Rails 4,紅寶石2其他重複的記錄中,MySQL如何找到在ActiveRecord的比原來

我想找到所有在我的數據庫,該數據庫是另一個記錄的重複記錄 - 但不是原來的記錄本身。

這樣我就可以update_attributes(:duplicate => true)在這些記錄中的每一個上,並且保留原始的一個不被標記爲重複。

你可以說我正在尋找與Uniq相反的*我不想要Uniq值,我希望所有的值都不是uniq之後的事實。我不希望所有具有重複的值都包含原始值。

我不介意爲此使用純SQL或Ruby,但我寧願使用活動記錄來保留Railsy。

讓我們說這個表被稱爲「Leads」,我們正在尋找那些字段「telephone_number」是相同的。我會單獨留下記錄1並將2,3和4標記爲重複=真。

*如果我想UNIQ相反我可以做類似Find keep duplicates in Ruby hashes

b = a.group_by { |h| h[:telephone_number] }.values.select { |a| a.size > 1 }.flatten

但是,這是所有記錄,我希望所有的比原來的我比較它的其他的複製者至。

+0

你打算刪除這些重複?因爲肯定有SQL在刪除重複 – mmcrae 2014-10-17 17:19:44

+0

不,我保留它們。 – LpLrich 2014-10-17 17:22:23

回答

1

我假設你的查詢返回在數組中具有相同電話號碼的所有'Leads'b。然後,可以使用

b = b.shift

這需要第一元件斷開B排列的。那麼你可以繼續你的原始想法update_attributes(:duplicate => true)

+0

有趣,謝謝你。 – LpLrich 2014-10-17 17:21:44

+0

對不起,我剛剛修正了一個錯字,它是b.shift,而不是(b)。只要你可以將所有的記錄放入一個數組中,這應該可以工作。 – sabrams 2014-10-17 17:22:53

+0

感謝您的支持。這是我以前從未真正考慮過的事情。 – LpLrich 2014-10-17 17:23:47