Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usunięcie powtarzających się wierszy
Forum PHP.pl > Forum > Bazy danych > MySQL
Apocalyptiq
Przez przypadek dodałem sporo danych 2x, tak że mam duplikat każdego. Jak mogę łatwo te duplikaty usunąć? Jest ich kilkaset, więc ręcznie nie bardzo :-)

Na innym forum znalazłem coś takiego:
  1. DELETE FROM Pliki p
  2. [img]http://www.forum.webdiary.pl/images/nums/3.png[/img]WHERE [img]http://www.forum.webdiary.pl/images/nums/4.png[/img] (SELECT count(*) FROM Pliki WHERE rodzaj=p.rodzaj)>1

(http://www.forum.webdiary.pl/ftopic6506.html)
Ale czy to czasem nie usunie wszystkich rekordów? Tj. duplikat i oryginał?


Zrobiłem to z poziomu php - pobrałem wszystkie mecze, nastepnie sprawdzałem dla każdego meczu czy wystepuje duplikat - jeżeli występuje, usuwam aktualny (duplikaty sprawdzam dla każdego na bierząco, więc jeżeli usune duplikat, dochodząc do drugiego meczu już duplikatu nie wykryje, więc go nie usunie).
Marr
hmmm - wydaje mi się, że najprościej będzie dopisanie magicznego słówka "distinct" w kwerendzie i po sprawie smile.gif (SELECT DISTINCT FROM i tak dalej )
Fixer
było już wiele razy...

  1. CREATE TEMPORARY TABLE tmp SELECT DISTINCT * FROM duplikaty; TRUNCATE TABLE duplikaty;
  2. INSERT INTO duplikaty SELECT * FROM tmp; DROP TABLE tmp;


1 linia/polecenie tworzy tymczasową tabelę o nazwie tmp, do której trafia niezduplikowana zawartość naszej tabeli z duplikatami. Duplikaty eliminuje polecenie DISTINCT.

2 linia czyści zawartość tabeli, która przechowuje duplikaty.

3 linia wstawia do wyczyszczonej tabeli z byłymi duplikatami zawartość tabeli tymczasowej, gdzie duplikatów już nie ma.

4 linia usuwa tabelę tymczasową. Gotowe!
Apocalyptiq
Fajny sposób, dzięki! :-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.