關於如何在數據庫中查找重複內容有很多問題,但沒有解決具體問題。如何在數據庫中查找重複項?
我有一個約表。 120000個條目。我需要找到重複的。爲了找到他們,我用一個PHP腳本的結構如下所示:
//get all entries from database
//loop through them
//get entries with greater id
//compare all of them with the original one
//update database (delete duplicate, update information in linked tables, etc.)
它不可能在最初的查詢已經整理出所有重複,因爲我經歷了,因爲我重複的搜索中的所有條目必須循環不僅對100%相同的條目敏感,而且對90%相同的條目也很敏感。我使用了similar_text()。
我認爲第一個循環沒問題,但循環循環內的所有其他條目太多了。有120000個條目,這將接近(120000^2)/ 2次迭代。
因此,不要在循環中使用循環,而必須有更好的方法來做到這一點。你有什麼想法?我想過使用in_array(),但它對90%字符串相似性這樣的東西不敏感,也沒有給我數組的字段找到重複項 - 我需要那些獲得條目的id來更新數據庫正確。
任何想法?
非常感謝!
查爾斯
更新1
我使用的是現在的查詢如下:
SELECT a.host_id
FROM host_webs a
JOIN host_webs b ON a.host_id != b.host_id AND a.web = b.web
GROUP BY a.host_id
這表明原件及複印件完美,但我需要擺脫原件,即與相關數據一起找到的第一個。我怎麼能做到這一點?
謝謝!查詢容忍90%的相似性嗎? – weltschmerz 2012-07-12 22:48:04
@Charles它取決於你如何定義90% - 這就是第二個例子。這返回至少兩個'col1','col2','col3'是相同或相同的列都具有相同的soundex得分的行。您使用的確切查詢用例取決於列類型和用於確定相似性的標準。 – DaveRandom 2012-07-12 22:51:30
我正在嘗試使用你的第一個解決方案,但它帶來了一個問題:它不僅給我找到的重複項,而且還給出了原始的重複項。我該怎麼做才能使它不顯示原件?注意:可以有多個重複。查看我現在正在使用的查詢的問題編輯。謝謝! – weltschmerz 2012-07-21 16:01:08