次のようなフィールドを持つデータベーステーブルがあります。
username, description, password.
時間を節約するために、メンバーが互いに説明をコピーすることがあります。
だから私はこれを持っています:
ジョン - ジョンの説明 - ジョンのパスワード
Michael - John の説明 - Michael のパスワード
重複するフィールド エントリを検索して削除する mysql クエリはありますか? 途中でデータの行全体を削除するのはどうですか?
新しいテーブルを作成し、その中の重複しないエントリを移動し、古いテーブルを削除して、新しいテーブルの名前を変更します。
例:
CREATE TABLE `new_table` as
SELECT * FROM `old_table` WHERE 1 GROUP BY [columns to remove duplicates by];
DROP TABLE `old_table`;
RENAME TABLE `new_table` TO `old_table`;
ただし、定期的に使用する場合にのみ有効であり、重複があるかどうかはチェックしません。一意のエントリをグループ化し、別のテーブルに移動するだけです。エントリをフィルタリングする場合に便利です。
別の方法は、次のように確認することです。
SELECT `name` FROM `table` WHERE `description` LIKE '%descriptiontexthere%'
次に、いくつかの結果が見つかった場合、それは重複です。
ただし、大きな欠点があります。ユーザーは 1 文字しか変更できず、クエリは失敗します。
ただし、この欠点は、記述を配列に分割することで (完全ではありませんが) 回避できます。たとえば、100 文字ごとに分割し、上記の例のようにチェックしますが、複数の条件 (例: description LIKE 'first100chars' OR description LIKE 'second100chars'
) を使用します。
3 番目の方法は、説明を単語の配列に分割し、同じ単語が多すぎる行を選択することです。X 個の同じ単語を含む行は、重複している可能性があります。入力した説明の長さに基づいてしきい値を設定できます。
完全に同じエントリでない限り、重複しているかどうかはわかりません。