• 20-03-2009, 21:47:36
    #1
    Üyeliği durduruldu
    Mrb,

    Bir video sitem var ve siteden order by rand ile taglari aliyorum ama taglar 100,000 oldugu icin cok kasiyor onun yerine internetten sunu buldum

    $rastag = mysql_query("select * from tags");
    $max = mysql_num_rows($rastag);
    $rand = rand(1,$max);
    $rastag2 = mysql_query("select * from tags limit $rand, $max");
    max 30 tag gostermek istiyorm, ama onu bu koda nasil yapirim anlamadim.


    Bu sekil daha iyimis diyorlar, ben pek anlamam ve sormak istiyorum bu kod daha mi iyi ve dogru mu yazdim ?.
  • 20-03-2009, 21:59:38
    #2
    rand()'a oranla daha iyidir. daha iyi performans için
    select * from yerine select sutun1,sutun2,sutun3 from
    şeklinde kullanirsaniz bununda performans'a katkisi olur.
  • 20-03-2009, 22:23:56
    #3
    Üyeliği durduruldu
    verdiginiz örnek uygun yalnız şöyle bir mantık hatası var. limit kullanırken limit baslangic,gosterilecekadet

    şeklinde kullanırsınız

    verdiginiz kodu aralık seçecek şekilde kullanmak istiyorsanız şu şekilde düzenlenirse daha sağlıklı olur.
    $rastag = mysql_query("select count(*) from tags");
    while($row = mysql_fetch_array($rastag) ){
              $max = $row[0];
    }
    // önceki örnek mysql_num_rows ile aldigi için 100 000 kayıtta mıçar
    // kaçtane rastgele göstermek istediginiz değişkeni
    $randnum  = 10;
    $rand = rand(0,$max);
    $rastag2 = mysql_query("select * from tags limit $rand, $randnum");
    sizin verdiginiz örnekte rastgele bir değerden başlayıp ondan sonraki tüm kayıtları çekmiş oluyor

    bu şekilde kod daha verimli ve uygun olur. Bu kod aslında her türlü kayıtlardan sıralı aralık seçmiş olur ama 100 000 kayıt için verinin aralık şeklinde olması bir sorun degil. aralık degilde her seferinde farklı çekmesii çin şu şekilde olmalıydı

    $rastag = mysql_query("select count(*) from tags");
    while($row = mysql_fetch_array($rastag) ){
              $max = $row[0];
    }
    $randnum  = 10;
    for($i=1;$i<=$randnum;$i++){
       $rand[] = rand(0,$max);
    }
    $rastag2 = mysql_query("select * from tags where id in (".implode(","$rand).")");
    çok fantazik oldu ama oldu yani
  • 20-03-2009, 22:39:54
    #4
    Üyeliği durduruldu
    sdemirkeser cok sagol. senin verdigin scripti kulanmaya karar verdim.
  • 26-03-2009, 01:57:57
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    SELECT * FROM `table` WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` ) ORDER BY id LIMIT 1;