Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

database duplicate halp!


senko

Öne çıkan mesajlar

çocuklar,
şimdi elimde şöyle bir darabase var

ip modem
192.168.100.1 adsl
192.168.100.1 vdsl
192.168.100.5 adsl
192.168.100.5 vdsl
192.168.100.6 vdsl
192.168.100.7 adsl

gibi
gördüğünüz gibi dublicate'ler var, benim istediğim bu duplicate verilerden bir tanesini silmek. hangisi olduğu önemli değil ama
192.168.100.1 den ya adsl ya vdsl olanı silmek yani ip'leri unique şekilde bırakmak
nası yapabilirim bunu mysql de bileniniz var mıdır
Link to comment
Sosyal ağlarda paylaş

ahah sharky naptın ya :)

abi dediğim gibi önemli olan sadece ip'lerin unique olması,
yani o listeden
ya 192.168.100.1 vdsl silincek
ya da 192.168.100.1 adsl silincek

ama tabloda sadece 1 tane 192.168.100.1 kalmalı.

distinct ile sadece farklıları görürüm ama onun duplicate'lerini nasıl silcem tablodan?
Link to comment
Sosyal ağlarda paylaş

Optimizasyon düsünmeden aklima ilk geleni yaziyorum. Birden fazla bulunan cok IP varsa baya sorgu kullanmis oluyorsun ama. Daha iyi bir cözüm arardim ben olsam.

IP sütunu üstünde group by yaparak ve count kullanarak hangi IP'den kac tane var döndüren bir sorgu yaz. Sonra 1'den fazla olan her IP'ye A dersek:

SELECT * FROM HEDE WHERE ip = 'A' LIMIT (TOPLAMSAYI - 1) (ya da artik db'ne göre syntaxini kullanarak) ile fazlalik IP'leri bul. Bunun döndürdüklerini de sil. Silme isini bu SELECT ile de birlestirebilirsin bir sekilde. Bu select'in döndürdüklerini direk silebilirsin yani. Teknik kismi sana kalmis.
Link to comment
Sosyal ağlarda paylaş

Hmm. DISTICNT ve GROUP BY yöntemleri vardı benim baktığım sayfalarda da. DISTINCT benim de anladığım (ve senkonun dediği) şekilde silmiyo gereksizleri, sadece SELECT sırasında elimine ediyo. Gruplayarak "birden fazla olanları uçur" dediği yönteme de "büyük table ile yavaş olabilir" diyodu baktığım sayfalar, ama anaşılan başka yöntem yok :P
Link to comment
Sosyal ağlarda paylaş

ip'ye göre group by yapıp max(modem) alanını seç
cevabı yedek bi tablo oluşturup oraya at
orijinal tabloyu truncate et
yedek tablodaki verileri orijinale çak

- create table yedek as select alan1, alan2, ..., alann, max(modem) as modem from orijinal group by ip
- truncate table orijinal
- insert into orijinal select * from yedek
- ???
- PROFIT!!!
Link to comment
Sosyal ağlarda paylaş

@mirage, exists tam oyle calismiyor yalniz, ona dikkat etmek lazim. eger birden fazla row donuyorsa direkt exists true olur.

said:
If a subquery returns any rows at all, EXISTS subquery is TRUE, and NOT EXISTS subquery is FALSE


exists kullanilacaksa where ile baglamak lazim. mysql dokumantasyonunda detaylari var. http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...