Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 13 odgovora
  • 7.439 pregleda

Najnovija ↓

Duplikati u bazi -MySql 06.03.2004. u 17:14 · pre 275 meseci #1
Pozdrav svima

Php, mysql

Da li neko zna kako da napravim sql upit koji će da mi prikaže duplikate-iste redove iz baze?

Primer:
Upit koji će prikazati samo email-ove i imena korisnika koji imaju isti email.


Rbr.___Email________Ime

1. [email protected] - Petar Petrovic
2. [email protected] - Jovan Jovanovic
3. [email protected] - Milan Mitrovic

itd.

Unapred hvala
Potpis
Kusur
Re: Duplikati u bazi -MySql 06.03.2004. u 18:05 · pre 275 meseci #2
Grupises slogovre po polju koje proveravas i korsitis funkciju count() da ti prebroji broj slogova u listi. Sve grupe koje imaju vise od jednog sloga sadrze duplikate.
Re: Duplikati u bazi -MySql 06.03.2004. u 20:22 · pre 275 meseci #3
Code:
SELECT *
FROM korisnici
WHERE email IN
 (
  SELECT email
  FROM korisnici
  GROUP BY email
  HAVING COUNT(*) > 1
 )
ORDER BY email

Na žalost, ovo neće da radi u MySQL-u, još uvek ne. Najavljeno je za narednu verziju jezika...
U međuvremenu - mora da se radi u 2 koraka.

Prvi query vraća listu multipliciranih emailova, što kroz PHP treba da se unese kao lista vrednosti za drugi query...
Potpis
BoxUp
interesantna logička igra
Monty Hall paradoks - interaktivni demo
Re: Duplikati u bazi -MySql 07.03.2004. u 00:00 · pre 275 meseci #4
A sta ce ti spoljni upit, dovoljno je samo unutrasnji:
Code:

SELECT email, ime, COUNT(email) 
FROM tabela
GROUP BY email, ime
HAVING COUNT(email)>1

Potpis
Owl
Re: Duplikati u bazi -MySql 07.03.2004. u 15:54 · pre 275 meseci #7
Da, da sad sam pogledao sta je covek trazio
Potpis
Owl
Re: Duplikati u bazi -MySql 07.03.2004. u 16:54 · pre 275 meseci #8
Možda nisam dobro objasnio šta mi treba, ali ste mi ipak pomogli

Upotrebio sam kod od _owl_ -a:

Code:
SELECT mail, COUNT(mail)
FROM korisnici
GROUP BY mail
HAVING COUNT(mail)>1


Izbacio sam grupisanje po imenu zato što greši u brojanju

Baš sam to tražio - sad znam koji su mail-ovi duplikati i koliko ih ima.

Puno hvala!
Potpis
Kusur
Re: Duplikati u bazi -MySql 12.03.2004. u 14:58 · pre 275 meseci #9
Dobio si duplikate i znas da ima 5 ovih, 15 onih, 7 drugih... kako da obrises sve duplirane a da ostane po jedan. Znaci hocu umesto 5 sa istim e-mailom da obrisem 4 a da ostane samo 1. Naravno, da se ne radi rucno.

Ili konkretnije, imam bazu od oko 25000 korisnika gde su se neki prijavili i po 70 puta. proverio sam i imam oko 3 hiljade korisnika koji su se registrovali vise od jednom (po postanskoj adresi) sto daje negde oko 7 hiljada upisa. Opet postoji problem posto verovatno Karadjordjeva 12 postoji i u Beogradu i u Novom Sadu. ali to je sada manje vazno... mogu da ga grupisem i po imenu i prezimenu. Postoji jos jedna problem, sa iste adrese su se registrovali njih cetvoro (cela porodica) a ja hocu samo 1 po adresi.

Da li ima neko ideju kako da (naravno, ne rucno) obrisem 69 upisa tog sto se registrovao 70 puta a da ostane samo 1 (bilo koji).
Potpis
Goran Pilipović fka bluesman
Re: Duplikati u bazi -MySql 12.03.2004. u 15:11 · pre 275 meseci #10
Hm, mozda je najlaksi (koji mi sad pada na pamet) nacin napraviti skript koji ce da puni drugu (novu) tabelu(e) sa podacima, s tim da kad uzima iz stare proveri da li u novoj vec postoji podudaranje, pa da ubacuje samo ako ne postoji. Naravno, posle obrises stare tabele, nove preimenujes u stare.

Nemam sad vremena da razmisljam o tome....
Potpis
Kad sve ostalo zakaže, pročitaj uputstvo...
Re: Duplikati u bazi -MySql 12.03.2004. u 15:28 · pre 275 meseci #11
Jedno resenje je kopiranje svih duplikata u temp tabelu, pa brisanje istih iz originalne tabele, a onda preko distinct iz temp tabele vratiti po 1 row u originalnu tabelu... da li postoji bolje, elegantnije resenje?
Potpis
Goran Pilipović fka bluesman
Re: Duplikati u bazi -MySql 12.03.2004. u 15:32 · pre 275 meseci #12
Relativno lako.

Metod 1:
Poteraš upit da ti grupiše po svim poljima koja želiš da budu jedinstvena, gde je count(*) veće od 1. Prihvatiš rezultat i provučeš ga kroz petlju gde prvo brišeš sve redove nađenih duplikata i odmah nakon toga kreiraš novi zapis sa podacima reda iz rezultata.

Metod 2:
Napraviš privremenu tabelu gde insertuješ grupisane duplikate. Potom brišeš duplikate. Na kraju prebaciš podatke iz privremene tabele i ubiješ je. Ovo bi trebalo da brže radi.

Ovo ne radi baš kako si opisao jer se brišu svi zapisi pa potom dodaje jedan, ali deluje jednostavnije za realizaciju.
Potpis
BoxUp
interesantna logička igra
Monty Hall paradoks - interaktivni demo
Re: Duplikati u bazi -MySql 12.03.2004. u 17:17 · pre 275 meseci #14
napraviš drugu tabelu sa istim poljima, dodaš UNIQUE ključ na polja koja u kombinaciji moraju biti jedinstvena (adresa, grad) i uradiš jedan prosti

insert into tabela2 select * from tabela1
Potpis
blogče :: unescaped beta
  »
go-paste extenzija
  »
reč dana: backup
  »
bočne koalicije
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme