Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Usunięcie duplikatów z bazy
knefelio
post 20.02.2012, 02:38:28
Post #1





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 26.11.2009

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


Chciałbym z bazy mysql usunąć rekordy ze zduplikowanym jednym polem. Znalazłem taki kod:

  1. DELETE FROM tabela USING tabela, tabela AS alias_tabeli
  2. WHERE (tabela.klucz_glowny > alias_tabeli.klucz_glowny) AND (tabela.e_mail = alias_tabeli.e_mail);


Powoduje on u mnie zapętlenie i muszę przerwać jego wykonywanie. Co może być tego przyczyną?
Go to the top of the page
+Quote Post
bww
post 20.02.2012, 08:59:18
Post #2





Grupa: Zarejestrowani
Postów: 42
Pomógł: 3
Dołączył: 14.02.2012

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


Ja nie do końca rozumiem co jest w zapytaniu powyżej.

  1. DELETE FROM tabela t1
  2. WHERE EXISTS (SELECT 1 FROM tabela t2 WHERE t1.email = t2.email GROUP BY email HAVING count(*) > 1)
  3. ORDER BY klucz_glowny -- to można dodać jeśli klucz główny jest autoincrement i zależy nam na usunięciu rekordu wcześniej dodanego
  4. LIMIT 1


Przed wykonaniem najlepiej zamienić DELETE na SELECT * i zobaczyć, czy otrzymamy oczekiwany wynik, a jeszcze lepiej zrobić backup tabeli.
Zapytania nie testowałem.

Ten post edytował bww 20.02.2012, 09:00:34
Go to the top of the page
+Quote Post
knefelio
post 21.02.2012, 17:37:22
Post #3





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 26.11.2009

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


ok, trochę potestowałem i to zapytanie które podałem działa, ale zajmuje bardzo dużo czasu. wydaje mi się że jest to spowodowane problemem z kolumną autoincrement

tabela z której chciałem odsiać zduplikowane wiersze tworzona jest z kilku innych na zasadzie:

  1. INSERT INTO tabela(pole1)
  2. SELECT pole1
  3. FROM tabela1;
  4.  
  5. INSERT INTO tabela(pole1)
  6. SELECT pole1
  7. FROM tabela2;


Z tabela1 dodaje 4000 wierszy z tabela2 8000 wierszy jest w sumie zatem w wynikowej tabeli 12000 wierszy a numeracja id pokazuje wierszy 16000. We właściwościach tabeli widać 12000 wierszy, a pole id biegnie do 4000 a potem zaczyna się od 8000..16000. Czym może to być spowodowane?

Id mam zdefiniowane tak:

  1. id int NOT NULL AUTO_INCREMENT,
Go to the top of the page
+Quote Post
bww
post 22.02.2012, 11:15:45
Post #4





Grupa: Zarejestrowani
Postów: 42
Pomógł: 3
Dołączył: 14.02.2012

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


Zapytanie które podałem powinno się wykonać w kilka sekund, próbowałeś?
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: 6.07.2025 - 10:34