データベースで重複を見つける方法について多くの質問がありますが、私が抱えている特定の問題はありません。
私は約のテーブルを持っています。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
オリジナルと複製を完全に表示しますが、オリジナル、つまり関連データで最初に見つかったものを削除する必要があります。どうすればそれを達成できますか?