[ NetworkAdmin @ 04.10.2002. 13:01 ] @
mysql pitanje

Recimo imama tabelu u kojoj index kolonu sa 1, 2, 3, 4, 4, 5, 5, 5, 6, 7, 8, 8, 9, 9, 9, 10...

I sada hocu da izbacim duplikate redove sve 4, 5, 5, 8, 9, 9..
[ mbabuskov @ 05.10.2002. 13:43 ] @
U normalnim relacionim bazama podataka (Oracle, MSSQL, Informix, Firebird) ... mozes da uradis ovo:

delete from tabela t1 where 1 <> (select count(*) from tabela t2 where t1.id = t2.id)


Ali mysql je prilicno jadan za iole komplikovanije stvari. Najbolje da napises php program koji ce da isbrise suvisne redove...
[ Riste Pejov @ 07.10.2002. 08:33 ] @
Stvarno ne znam sta hoces reci sa "izbacim" ?

ali ukoliko ne zelis ih obrisati iz tabele nego sam da u query ne dobijes
duplikate, onda mozes iskoristiti DISTINCT

a ukoliko zelis spreciti unos duplikata onda postavi Primary Key na istoj koloni, ili samo dodaj UNIQUE constraint.
[ dinke @ 07.10.2002. 12:49 ] @
Da bi izbacio i /ili sprecio dalji unos duplikata u neku kolonu, nepophodno je da ta kolona bude definisana kao "unique" ili "primary key". Obzirom da ti to verovatno nisi ucinio prilikom kreiranja tabele, posao ce odraditi sledeci MySQL query:

ALTER IGNORE TABLE ime_tabele CHANGE COLUMN staro_ime_colone novo_ime_colone SMALLINT UNSIGED NOT NULL PRIMARY KEY;

U slucaju da vec imas jedan primary key u datoj tabeli, onda moras koristiti UNIQUE umesto primary key u datom upitu.

Btw, komentar gospodina mbabuskov o MySQL-u nema blage veze sa realnoscu, ali mislim da je o tome vec dovoljno pisano na ovom istom forumu.

pozdrav
D
[ mbabuskov @ 07.10.2002. 12:57 ] @

Citat:
Da bi izbacio i /ili sprecio dalji unos duplikata u neku kolonu, nepophodno je da ta kolona bude definisana kao "unique" ili "primary key". Obzirom da ti to verovatno nisi ucinio prilikom kreiranja tabele, posao ce odraditi sledeci MySQL query.


Mislim da je covek pitao Kako da izbaci redove. Dakle, kako da ih izbrise. Ok, ako je MySQL tako dobar, pokazite mi upit koji moze da izbrise duplikate iz tabele. (Pa moci ce jednog dana kada bude podrzavao pod-upite ili stored procedure) da do tada treba zasukati rukave. :)

Riste je dao predlog za SELECT DISTINCT, ali onda a imas redove koji nisu identicni, vec im je samo kolona id ista, dobijas opet duplikate.

Dakle, branioci MySQL-a, ocekujem vas odgovor, po mogucnosti u SQL jeziku.
[ dinke @ 07.10.2002. 13:12 ] @
Odgovor na tvoje pitanje je ALTER IGNORE ... SQL query iz mog prethodnog posta. Dakle on ce iz te postojece tabele izbrisati sve duplikate.

Sto se tice podupita, transakcija, stored procedura, pogleda i sl. skokni malo na www.mysql.com ili jos bolje na http://www.elitesecurity.org/tema/2953 pa ces videti da novije verzije MySQL-a to vec podrzavaju.
[ Riste Pejov @ 07.10.2002. 18:41 ] @
Pa da je MySQL mogao da svari sve te stvari, onda ne bi bio toliko lak za rad i ne bi ga imao svaki web hosting provider , i nije bi imao toliko velike korisnicke baze .... sto znaci ... kad vec zelis da uporedjujes, jedino ga mozes uporediti sa MS access-om , ali za seriozne poslove ... samo mozes lupati glavu od dzid jedno mesec dana i onda portovati aplikaciju na neku drugu bazu

Been there, done that.
i ja sam nekad (jos dok sam bio mlad i blesav) mislio da je MySQL fenomenalan, dok nisam otkrio stored procedure, subselecte i cursore ....