1

JavaScriptのクリック処理にバグがあるため、サーバーに送信されるJSON配列に複数のLocationオブジェクトが投稿されます。そのバグを修正する方法は知っていると思いますが、サーバー側のデータベース重複消去機能も実装したいと思います。ただし、このクエリの書き方がわかりません。

影響を受ける唯一のテーブルは次のようにレイアウトされます

+----+------------+--------+
| ID | locationID | linkID |
+----+------------+--------+
| 64 |         13 |     14 |
| 65 |         14 |     13 |
| 66 |         14 |     15 |
| 67 |         15 |     14 |
| 68 |         15 |     16 |
| 69 |         16 |     17 |
| 70 |         16 |     14 |
| 71 |         17 |     16 |
| 72 |         17 |     16 |
| 73 |         17 |     16 |
| 74 |         17 |     16 |
| 75 |         17 |     16 |
| 76 |         17 |     16 |
| 77 |         17 |     16 |
+----+------------+--------+

ご覧のとおり、私には複数のペアがありますが、(17, 16)との14ペアは2つ(14, 13)あり(14, 15)ます。重複するエントリの1つを除くすべてのレコードを削除するにはどうすればよいですか?

4

4 に答える 4

4

事後修正ロジックを実装しないでください。一意である必要があるフィールドに一意のインデックスを設定してください。そうすれば、データベースは手遅れになる前に重複挿入を停止します。

MySQL 5.1以降を使用している場合は、1つのコマンドで重複を削除して一意のインデックスを作成できます。

ALTER IGNORE TABLE 'YOURTABLE' 
ADD UNIQUE INDEX somefancynamefortheindex (locationID, linkID)
于 2012-06-28T16:42:58.007 に答える
3

個別のレコードを格納できる一時テーブルを作成してから、元のテーブルを切り捨てて、一時テーブルからデータを挿入できます。

CREATE TEMPORARY TABLE temp_table (locationId INT,linkID INT) 

INSERT INTO temp_table (locationId,linkId) SELECT DISTINCT locationId,linkId FROM table1;

DELETE from table1;

INSERT INTO table1 (locationId,linkId) SELECT * FROM temp_table ;
于 2012-06-28T16:50:07.980 に答える
1
delete from tbl
using tbl,tbl t2
where tbl.locationID=t2.locationID
  and tbl.linkID=t2.linkID
  and tbl.ID>t2.ID
于 2012-06-28T16:46:02.150 に答える
0

私はあなたがクリーンアップを意味するのではなく、新しいチェックを意味すると思いますか?可能であれば、一意のインデックスを付けます。DBを制御できない場合は、アップサートを実行し、挿入の代わりにnullをチェックします。

于 2012-06-28T16:43:48.197 に答える