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!


Öne çıkan mesajlar

Mesaj tarihi:
ç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
Mesaj tarihi:
SELECT DISTINCT(IP) ?

Sadece IP nin duplicate 'ini arıyorsun olarak varsayıyorum tabii. Çünkü verdiğin kayıtlarda duplicate yok. ADSL ve VDSL seçenekleri duplicate olmamasını sağlıyor.

Dolayısı ile eksik bilgi :)
Mesaj tarihi:
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?
Mesaj tarihi:
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.
Mesaj tarihi:
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
Mesaj tarihi:
Tablonun boyundan cok birden kac tane IP'nin birden fazla olduguna bakar. Dedigim sekilde yaparsan

1 group by sorgusu
Birden fazla olan IP sayisi kadar da DELETE/SELECT sorgusu yapiyorsun.

Yani tablo büyük de olsa, bu birden fazla IP bulunma olayi nadir olan bir seyse sorun degil.
Mesaj tarihi:
distinct ip olarak alıp çıkanları temp table a insertleyip, orjinal table ı komple delete edip, temptekileri orjinale instert etsek desem çok mu saçmalamış olurum ?
Mesaj tarihi:
SELECT DISTINCT sonuctaki ayni satirlari eler. Ayni IP'leri elemek icin ya sadece IP sütununu sececeksin ya da group by kullanacaksin. Iki sekilde de diger sütunlardaki verileri kaybediyorsun.
Mesaj tarihi:
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!!!
Mesaj tarihi:
herhangi bi sorun olabilmesine karsilik truncate yerine oncr asil db yi temp.xx yap.sonra yeni olusan db ye de eskinin ismini ver.sorun olursa tekrar rename ederek halledersin.
Mesaj tarihi:
Bu gayet iyi calisir bak. Ama öyle baska tabloya atmak yerine dogrudan da silebilmen lazim:


DELETE FROM inditabelafatihterimsitayla
WHERE NOT EXISTS (
SELECT *
FROM ... (Bu subquery Kojiroh'nun dedigi query)
)
Mesaj tarihi:
@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
×
×
  • Yeni Oluştur...