• 25-05-2014, 11:40:57
    #1
    Üyeliği durduruldu
    Merhaba,
    Öncelikle bu saçmalığı neden yapmak istediğimi belirteyim.
    Yazdığım scriptte bilindik topic tablosunda onaylı, onaysız ve beklemede gibi secenekler olacak.

    Ben de kullanıcıya random topic sunacağım. Eğer tek bir tabloda yaparsam bunları, sorgu önce onaylı topicleri bulacak ardından bulduğu onaylı topicler arasından seçim yapacak. Fakat 500-600 bin topic olduğunu varsayarsak sunucu iflas...

    Bende sunucunun neredeyse hiç etkilenmeyeceği şu sistemi düşündüm:
    Onaylı topic tablosu ve beklemede, onaysız topic tablosu ayrı olacak.
    Onaylı topic tablosu içerisinde kaç satır olduğunun sorgusunu alıp onu min,max rand değerinde max'a yazacağım çıkan random değeri alıp topic idsi olarak yazdırıp o topiği çekeceğim.

    Ama onaylı ve onaysız topiclerin tablosu ayrı olduğunda onaylamak istediğimde onaysız topiclerdeki satırları nasıl onaylı tablosuna taşırım?

    Özetle:
    Konular tek bir taloda olursa kasacağını düşündüğüm sorgu şu şekilde:
    SELECT * FROM tum_konular WHERE onay = 1 ORDER BY RAND()
    Çözüm yolu onaylı onaysız tabloları ayırıp şu şekilde satır sayısı bulmak:
    $konusayisi=mysql_num_rows(mysql_query("SELECT * FROM onayli_konular "));
    echo rand(1, $konusayisi);
    Sorum: onaylı, onaysız ve beklemede diye ayırdığım denk tablolardaki satırları nasıl istediğimde php ile diğer bir tabloya eski tablosundan silerek aktarırım?
  • 25-05-2014, 11:49:39
    #2
    post isleminden sonra if onaysiz ise deyip onaysiz satirindan gelen veriyi silip ayni verileri onayli tablosuna yazdiracaksin anladığım kadarıyla.
  • 25-05-2014, 11:56:06
    #3
    Üyeliği durduruldu
    burakolcay adlı üyeden alıntı: mesajı görüntüle
    post isleminden sonra if onaysiz ise deyip onaysiz satirindan gelen veriyi silip ayni verileri onayli tablosuna yazdiracaksin anladığım kadarıyla.
    Aynen öyle hocam admin panelinde onaysız konuları listeleyip onaylamak için post ettiğimde onaysız tablosundan silinip onaylı tabosuna taşınmasını istiyorum satırın.
  • 25-05-2014, 11:57:42
    #4
    3 farklı tablo yaratmanız bence daha çok yoracaktır. Ki, random id'deki veriyi select ile seçip, diğerine insert etmek ve eskisini silmek hep iş gücü olacaktır.

    Önerilerim :
    onaylı, onaysız, beklemede olan tüm içeriklerin toplam sayısını cachlemeniz (file-cache ya da mysql cache). Belirli aralıkta bu değeri güncellemeniz. (cronjob vs)

    Bunun yanı sıra,
    random() üretilen değere eşit ID olacak mı hep? Ya o ID silinmiş olursa? Bunu da düşünmeniz gerekecek.

    İyi çalışmalar.
  • 25-05-2014, 12:05:38
    #5
    ClubArkadas adlı üyeden alıntı: mesajı görüntüle
    3 farklı tablo yaratmanız bence daha çok yoracaktır. Ki, random id'deki veriyi select ile seçip, diğerine insert etmek ve eskisini silmek hep iş güc......
    Aslında evet. sorgu işlemleri hep uzayacak böyle yaparsan. Tek tabloda kalması daha mantıklı zaten toplamda ne kadar değer varki tabloda bu kadar uğraşıyorsun?

    veritabanında 10.000 veri dahi olsa işlem hızı çok yavaşlamaz. (Tabi sunucuya da bağlı) Yani demek istediğim sen sana en kolay ve pratik yapabileceğin şeyleri düşün şu anda baktınkı veri tabanı çok yoruluyor o zaman alternatif yollar denersin.