0

次のようなフィールドを持つデータベーステーブルがあります。

username, description, password.

時間を節約するために、メンバーが互いに説明をコピーすることがあります。

だから私はこれを持っています:

ジョン - ジョンの説明 - ジョンのパスワード

Michael - John の説明 - Michael のパスワード

重複するフィールド エントリを検索して削除する mysql クエリはありますか? 途中でデータの行全体を削除するのはどうですか?

4

1 に答える 1

0

新しいテーブルを作成し、その中の重複しないエントリを移動し、古いテーブルを削除して、新しいテーブルの名前を変更します。

例:

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 個の同じ単語を含む行は、重複している可能性があります。入力した説明の長さに基づいてしきい値を設定できます。

完全に同じエントリでない限り、重複しているかどうかはわかりません。

于 2012-07-24T23:37:18.523 に答える