Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Bazy danych _ Usunięcie zduplikowanych rekordów

Napisany przez: q3d 10.10.2017, 08:42:34

W tabeli o strukturze
id|offerId|eventDate|dateCreated|description

gdzie w eventDate znajduje się data w formacie '2017-01-01', a w dateCreated data w formacie '2017-01-01 10:00:01'

W tabeli znajduje się wiele rekordów dla których wartość w offerId,eventDate i description jest taka sama (błąd w skrypcie powodował, że to samo wydarzenie było dodawane wielokrotnie). Chciałbym usunąć te rekordy ale tak by pozostała jeden dla każdego dnia (eventDate).


Napisany przez: trueblue 10.10.2017, 08:53:34

  1. DELETE FROM tabela AS t1, tabela AS t2 WHERE t1.id>t2.id AND t1.eventDate=t2.eventDate

Zrób backup lub wykonaj zapytanie na kopii.

Napisany przez: q3d 17.10.2017, 07:47:22

Sprytne wink.gif Dziękuje bardzo.

W przypadku MySQL miałem tylko problem ze składnią gdyż w postaci:

  1. DELETE FROM tabela AS t1, tabela AS t2 WHERE t1.id>t2.id AND t1.eventDate=t2.eventDate


Zapytanie generował błąd składni. Dodanie aliasu po DELETE rozwiązało problem.

  1. DELETE t1 FROM tabela AS t1, tabela AS t2 WHERE t1.id>t2.id AND t1.eventDate=t2.eventDate


Sprawa druga to czas wykonywania. Rekordów jest ponad 1 200 000, a objętość tabeli to jakieś 72MB. Na localhost zapytanie trwa i końca nie widać. Jak więc to zoptymalizować przeprowadzić. Czy wprowadzenie indeksu dla eventDate coś polepszy? Wprowadzenie LIMIT?

Napisany przez: trueblue 17.10.2017, 07:51:05

Indeks na eventDate to dobry pomysł.

Napisany przez: Pyton_000 17.10.2017, 08:36:46

Możesz też utworzyć nową tabelę , ustawić index unique na te 3 pola, wrzucić tam dane, potem zrobić truncate na poprzedniej i znowu przewalić dane.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)