Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Usunięcie zduplikowanych rekordów
q3d
post
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
 
Start new topic
Odpowiedzi (1 - 4)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
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
Post #3





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

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


Sprytne (IMG:style_emoticons/default/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
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
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
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 14:25