• 07-04-2010, 22:18:09
    #1
    Bu konu webmaster genel bölümündeydi buraya aldım.
    -----
    Merhaba arkadaşlar
    Aylardır bir PHP aşkıdır sürükleyip götürüyor beni..
    Hatta kısa zaman olmasına ragmen kendimce basit scriptler yazdım

    Bugün video scriptimi kurdugum klasörüme giremeyince hosting şirketine mail attım
    ve aşağıdada kopyaladığım kodlarım yüzünden aşırı mysql tükettiğim ifade edildi.

    <?php 
    $varmi=mysql_num_rows(mysql_query("Select * from etiket where video='$w'")); 
    if($varmi): 
    mysql_query("UPDATE etiket SET hit=hit+1 WHERE video='$w'"); 
    else: 
    mysql_query("INSERT INTO etiket  SET video='$w', hit=1, adi='$bulunanbaslik', resim='$vimg', tarih='$tarih'"); 
    endif; 
    ?>
    Bu kodlar; gelen video ID ni veritabanında ariyor
    eger varsa hitini 1 arttırıyor eğer yoksa video bilgilerini kayıt ediyor.

    Asıl sorun video ID ni araken oluşuyor yani asıl mysql tüketen yer orası
    peki o satırı nasıl değiştirmem lazım yani oraya limit atanırmı ?
    Bu işin doğrusu nedir? bana yardımcı olursanız çok sevinirim

    Hosting şirketi, bu durumu düzenlemem için 48 saat süre tanıdılar
    bende onları çok seviyorum ve çok menunum benim yüzümden başları agrısın istemiyorum onun için bir önce bu durumu çözmek istiyorum

    Anlayış gösteren hosting şirketime ve sizlere şimdiden teşekkür ederim
    Iyi çalışmalar..
  • 07-04-2010, 22:50:28
    #2
    Eposta Aktivasyonu Gerekmekte
    etiket tablondaki video alanını index olarak ata ve * yerine ilgili alanları kullan

    count kullanabilirsin mysql_num_rows yerine
    Pardon linki yanlış vermişim
    http://dev.mysql.com/doc/refman/5.1/...ting-rows.html
  • 07-04-2010, 22:51:19
    #3
    Üyeliği durduruldu
    num_rows yerine COUNT() kullanın
  • 07-04-2010, 23:13:58
    #4
    ilginiz için tşk ederim bu arada hostcu bana limit falan koy demişti o nasıl oluyor?
    NiZZo_ "..video alanını index olarak ata.." burda index derken kastınız neydi acaba
    onu benim için biraz daha açarsanız çok sevinirim tam anlamadımda.
  • 07-04-2010, 23:14:15
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Ya da:
    <?php 
    $varmi = mysql_query("
    			SELECT video
    			FROM etiket
    			WHERE video = '$w'
    			LIMIT 1");
    
    if(empty($varmi))
    	mysql_query("
    		UPDATE etiket
    		SET hit = hit + 1
    		WHERE video = '$w'"); 
    else
    	mysql_query("
    		INSERT INTO etiket
    			(video, hit, adi, resim, tarih)
    		VALUES ('$w', 1,  '$bulunanbaslik', '$vimg', '$tarih')"); 
    ?>
  • 07-04-2010, 23:40:43
    #6
    Eposta Aktivasyonu Gerekmekte
    SurucLu adlı üyeden alıntı: mesajı görüntüle
    ilginiz için tşk ederim bu arada hostcu bana limit falan koy demişti o nasıl oluyor?
    NiZZo_ "..video alanını index olarak ata.." burda index derken kastınız neydi acaba
    onu benim için biraz daha açarsanız çok sevinirim tam anlamadımda.
    http://forum.ceviz.net/veritabanlari...ns-sorusu.html

    http://dev.mysql.com/doc/refman/4.1/...l-indexes.html
    http://www.aspsitem.com/makaleyaz-22...kurtulmak.html

    Yeterlidir sanırım

    Bu arada neye limit koyacakmışsın anlamadım ?
  • 07-04-2010, 23:47:09
    #7
    NiZZo_ hocam tşk ettim. siz cevap yazarken ben bu mesajımın yarısına geldim. bitirim bari
    Hostcunun limitten kastı; benim sorgularım tum alanları arıyordu.
    Sanırım sadece çalışmak istedigin alanda arama yapan sorgu yaz dedi.

    Benim asıl istedigim sorgu, veriyi arıyacak buldugunda duracak yani tum veritabanını gözden gecirmeye gerek yok.

    Aşağıdaki sorgum nasıl dogrumu acaba?
    Etiket tablosunda sadece video alanında arama yapıp ilgili veriyi buldugunda duracak

    <?php
    $sorgu = mysql_query("select count(video) from etiket where video='$w' limit 1");
    if(!sorgu) {
    mysql_query("INSERT INTO etiket  SET video='$w', adi='$bulunanbaslik', tarih='$tarih'");
    }
    ?>
  • 08-04-2010, 00:19:30
    #8
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Arkadaşım öncelikle ilk mesajında kullandığın sorgu, bir döngü içerisinde vs.değilse, ya da ilgili sayfanın başka bir yerinde anormallik yoksa, çünkü diğer değişkenleri nasıl alıyorsun bilemiyoruz, veya mysql tablo yapında sorun yoksa, mysql'i kasmasına imkan yok, eğer söylediğim sebepler yoksa ve buradan dolayı kasıyor diye iddia ediyorsa sen bırak o hostu.

    Arkadaşlar söylemiş zaten, sorgu yaptığın sütunu index olarak atıyacaksın mysql den(burada video sütunu), daha sonra ona göre sorgunu yapacaksın. Şimdi tablonda etiket idi alanının etiket_id olduğunu varsayalım, bu alan primary olacak :

    <?php
    $sorgu = mysql_query('select count(etiket_id) as sayi from etiket where video="'.$w.'"');
    $gelen = mysql_fetch_assoc($sorgu);
    if($gelen['sayi'] > 0){//kayıt varsa
      $ekle = 'update etiket SET hit=hit+1 where video="'.$w.'"';
    }else{//yeni kayıt
      $ekle = 'insert into etiket set video="'.$w.'", hit=1, adi="'.$bulunanbaslik.'", resim="'.$vimg.'", tarih="'.$tarih.'"';
    }
    mysql_unbuffered_query($ekle) or trigger_error(mysql_error(),E_USER_ERROR);
    ?>
  • 08-04-2010, 00:35:10
    #9
    metadige hocam ilgin için tşk ettim
    Geçen video sayfama girdim baktım sayfa yok, FTP ye girdim glasore giremiyorum
    hostcu ile pek samimi degiliz ama ilgi alakası için seviyorum hemen mesaj yazdım
    oda dediki video scriptini optimize et çok mysql tüketiyor
    bende tam olarak neresi dedim oda ilk mesajımda verdigim kodlardaki alanı gosterdi

    Amaç izlenmek istenilen video idi varmı yokmu ona gore işlem yapmak basit bir durum
    veri falan cekmiyorum sadece duruma gore işlem yaptıracam o kadar.

    Kayıt edilmek istenilen verilerde PHP ile RSS den cekiliyo vertanablık iş yok yani
    ilk mesajda verdigim kodu 3 sayfada kullanıyorum ve günlük tekil hitim 1100-1200 dür
    bende durumu normal karşıladım ve sormak istedim

    Hem bu sorunumu gidermek hemde gecici degilde kalıcı bilgi edinmek için bazen doruları derinleştirerek soruyorum.

    Sanırım conut kullanılsa daha az mysql tüketilecek
    peki benim yukarda örnek olarak yazdıgım sorgu dogrumu ?

    Yada tekrar kopyalim.. (tablo da bazı alanları sildim bu şekilde çalışsa bile kafi)

    <?php 
    $sorgu = mysql_query("select count(video) from etiket where video='$w' limit 1"); 
    if(!sorgu) { 
    mysql_query("INSERT INTO etiket  SET video='$w', adi='$bulunanbaslik', tarih='$tarih'"); 
    } 
    ?>

    Haa bu arada metadige etiket tablosundaki ID alanı primary (Birincil anahtar)