[ ZeRo8 @ 31.07.2006. 13:27 ] @
Koristim mysql server 3.23.33 i hteo bih da iz jedne tabele obrisem sve duplikate.
Ja imam formular na web stranici za prijavu, i ko se prijavi ide direktno u bazu. Primary key je ID. Desava se da se jedna ista osoba prijavi vise puta i ja dobijem u bazi iste podatke u svakom polju sem ID koji ide na autoincrement.
Preko kog upita bi moga obrisati sve duplikate (recimo one koji imaju isto ime, prezime, ulicu i datum rodjenja)?

hvala
[ jablan @ 31.07.2006. 13:44 ] @
Za početak, dodaj kontrolu pre upisa novog sloga, da dupli slog uopšte ne bi mogao da ti se pojavi.

Kad to uradiš, mislim da će ti najjednostavnije biti da napišeš malu jednokratnu PHP skriptu za brisanje duplikata, s obzirom da ta verzija MySQL-a ne podržava ugnježđene upite.
[ Dejan Topalovic @ 31.07.2006. 15:24 ] @
1. Kao sto je kolega jablan rekao, osiguraj jedinstvenost slogova.
2. Kreiraj privremenu tabelu tvoja_tabela_copy:
Code:

create table tabela_copy
as
select max(id) id, ime, prezime, ulica, rodjendan from tabela
group by ime, prezime, ulica, rodjendan
(podesi nazive kolona u svojoj tabeli)
3. dropni staru tabelu
Code:
DROP TABLE tabela;

4. preimenuj novu tabelu:
Code:
ALTER TABLE tabela_copy RENAME TO tabela;


i imas na kraju po jedan slog za svakog korisnika.


Umjesto koraka pod 3. i 4. mozes pokusati jedno medjurjesenje, ali posto nemam pri ruci MySQL server, nisam siguran da li ce raditi:
Code:
DELETE FROM tabela
USING tabela_copy
LEFT JOIN tabela_copy
ON tabela_copy.id = tabela.id;
Ako ovo medjurjesenje ne radi, isprobacu ga veceras kod kuce...