• 02-05-2007, 23:18:35
    #1
    Üyeliği durduruldu
    Selam,
    DB olarak Mysql kullanıyorum ve veritaban'ımdaki bazı kayıtlar tekrarlanıyor. Şimdi bu tekrarlanan kayıtlardan fazlalıkları silmek istiyorum. Örneğin Bir kayıt'tan iki adet var ise bundan bir tanesini silmek istiyorum.Elle silmem mümkün değil çok fazla tekrarlanan kayıt var. Ne yapmam gerekli? Distinct ile tekrarlanan kayıtlar birkere geliyor fakat gelmeyen kısım'ı nasıl silebilirim?
    Teşekkürler.
  • 03-05-2007, 11:22:26
    #2
    Kurumsal PLUS
    select distinct rahat yapar o işi, ben select distinct kullanıodum.
  • 03-05-2007, 14:14:04
    #3
    Üyeliği durduruldu
    db ye sorgu at Distinct ile hepsinden bi tane olsun sonra gelen bilgileri fetch et başka bir db ye yaz böylece elinde tekil içerik olmuş olur sonra 1. db yi sil 2. nin dumb ını al 1. ye at ya da direk 2. yi kullan sen bilirsin.
  • 03-05-2007, 20:59:36
    #4
    Üyeliği durduruldu
    Aynı tablonun boşundan birtane daha oluşturdum ve sorgu olarak..
    insert hedef_tablo select * from tablo_adi group by kolon_ad
    Belki işine yarayacak biri çıkar..
  • 03-05-2007, 21:14:55
    #5
    Group by veya distinct ile silme işlemi yapılabilir ama nasıl yapılır tam bilgim yok.
    Yalnız bir dahaki kayıtları eklerken aynı kayıtlar olmaması için şöyle bir yol izlenebilir. (Tahminim youtube videosu ekliyorsun )

    <?php
    $video_id = '64MMKYTiu';
    $sonuc = mysql_query("Select video_id from TABLO where video_id = '$video_id' Limit 1");
    $satir = mysql_fetch_array($sonuc);
    $id = $satir['video_id'];
    
    if($id != $video_id){
    	mysql_query("-- insert --");
    	echo "eklendi";
    	
    	}else{
    	echo "veri tabanında kayıtlı";
    }
    ?>
  • 03-05-2007, 22:41:05
    #6
    Üyeliği durduruldu
    <?php
    $video_id = '64MMKYTiu'; 
    $sonuc = mysql_query("Select video_id from TABLO where video_id = '$video_id'"); 
    $satir = mysql_num_rows($sonuc); 
    
     
    if($satir !== 0){ 
        mysql_query("-- insert --"); 
        echo "eklendi"; 
         
        }else{ 
        echo "veri tabanında kayıtlı"; 
    }
    ?>
    Bu şekilde tam olarak olur. Öbür türlü sadece ilk kayıt'ı karşılaştıracaktır.
    Ve hayır youtube video'su eklemiyorum
  • 03-05-2007, 22:50:22
    #7
    Lisans adlı üyeden alıntı: mesajı görüntüle
    Bu şekilde tam olarak olur. Öbür türlü sadece ilk kayıt'ı karşılaştıracaktır.
    Ve hayır youtube video'su eklemiyorum
    Tamam zaten mantıkta orda ya
    Kaydı karşılaştırıyor kayıtlar birbirini tutmuyorsa veritabanında olmadığını anlayıp yeni kaydı ekliyor.
    Senin verdiğin örnekte ise sonuç sıfırsa kayıt olmadığı için yeni kaydı ekliyor. Sonuç aynı mantık farklı
    Böyle olmalı:
       <?php
    $video_id = '64MMKYTiu'; 
    $sonuc = mysql_query("Select video_id from TABLO where video_id = '$video_id'"); 
    $satir = mysql_num_rows($sonuc); 
    if($satir == 0){ 
        mysql_query("-- insert --"); 
        echo "eklendi"; 
        }else{ 
        echo "veri tabanında kayıtlı"; 
    }
    ?>
    Edit: limit 1 dememin sebebi kaydı bulduğunda diğer kayıtlarada bakmaması için. Limit 1 dediğimizde ilk kayda bakmıyor. Hepsine bakıyor ve bulduğu zaman altındaki kayıtları taramıyor. Limit 1 demezsek bulsa bile sonuna kadar tarıyor.
  • 03-05-2007, 23:21:20
    #8
    Üyeliği durduruldu
    Evet anladım. Limit'li hali daha mantık'lı bu durumda. Çok fazla query harcamaması daha az yorar DB'yi. !== Bu kısım dediğiniz gibi == olacak
  • 21-03-2008, 16:07:17
    #9
    Lisans adlı üyeden alıntı: mesajı görüntüle
    Aynı tablonun boşundan birtane daha oluşturdum ve sorgu olarak..
    insert hedef_tablo select * from tablo_adi group by kolon_ad
    Belki işine yarayacak biri çıkar..
    yaptım olmadı :S başka yolu yokmu varolan kayıtlar için. php asp kod yazamadıgım icin kodla yapamıyorum az cok mysql biliyorum oda mysql frontla