PDA

Pogčedajte punu verziju : MySQL uklanjanje duplikata


Nemanja Avramović
07. 02. 2008., 14:49
Ovako, krenuo sam da upgradeujem forum i javlja mi grešku: "Duplicate entry 'xxx' for key 1"

Odradim ja ovo iz phpMyAdmin-a: SELECT * FROM `postparsed` WHERE `postid` = 'xxx' i dobijem 2-4 rezultata. Kada obrišem sve osim jednog (duplikate), dobijam istu poruku samo se xxx promeni u neki drugi broj. E sad, pošto u tabeli ima oko 50000 unosa, a ja već pola sata brišem ovo ručno i ne vidim mu kraja, odlučih se da vas pitam da li možda postoji neka naredba (ili niz naredbi) kojom bih mogao da iz pMA (ili iz mysql konzole) da uklonim sve redove iz tabele postparsed kojima je postid isti, s tim da uvek ostane jedan od tih redova (ne želim sve da uklonim)?

dinke
07. 02. 2008., 15:06
http://www.dinke.net/blog/2006/09/21/mysql-kako-ukloniti-duplikate/sr/

dootzky
07. 02. 2008., 16:20
dinke ga je ubo'o pravo u metu.
svaka cast. :)

vidak
08. 02. 2008., 00:45
@Nemanja

nisam profesionalac ali mozda mogu malo da pomognem.
1. Ako si polju postid vec dao tako ime trebalo bi da ti to polje bude jednistveno, to jest da bude primary key. Posto izleda da to polje nije primary key vec secondary key potrebno je da vidis koje polje ti je jedinstveno za svaki record u toj tabeli. Kad to polje nađes dodaš u where delu WHERE (postid='xxx' and ime_jednistvenog_polja <>'neki broj')
Ako je tabela takva da nema jedinstvenog polja onda ti ostaje da ime_jednistvenog_polja bude neki podatak koji record sa postid='xxx' razlikuje bas taj od svih koje hoces da obrises.

Nadam se da sam ti makar malo pomogao

ivanhoe
08. 02. 2008., 02:53
a mozes i nesto ovako:

CREATE TEMPORARY TABLE `bla`
SELECT * FROM `postparsed` GROUP BY `postid`;
TRUNCATE TABLE `postparsed`;
INSERT INTO `postparsed`
SELECT * FROM `bla`;


EDIT: u stvari jos pametnije bi bilo da se umesto SELECT * navedu imena svih polja, sa DISTINCT `postid`, umesto GROUP BY dela

Nemanja Avramović
08. 02. 2008., 11:24
Hvala svima. Nešto sam zbudžio - sad radi :P