Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Usunięcie zduplikowanych rekordów
q3d
post 10.10.2017, 08:42:34
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 7
Dołączył: 10.01.2006

Ostrzeżenie: (0%)
-----


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).

Go to the top of the page
+Quote Post
trueblue
post 10.10.2017, 08:53:34
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  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.

Ten post edytował trueblue 10.10.2017, 09:12:39


--------------------
Go to the top of the page
+Quote Post
q3d
post 17.10.2017, 07:47:22
Post #3





Grupa: Zarejestrowani
Postów: 98
Pomógł: 7
Dołączył: 10.01.2006

Ostrzeżenie: (0%)
-----


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?

Ten post edytował q3d 17.10.2017, 07:47:58
Go to the top of the page
+Quote Post
trueblue
post 17.10.2017, 07:51:05
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Indeks na eventDate to dobry pomysł.


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 17.10.2017, 08:36:46
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 12:09