• 20-09-2012, 17:51:31
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Konuyla ilgili biraz araştırma yaptım ama aradığım sonucu malesef bulamadım.

    $query = mysql_query("select * from Sergi ORDER BY RAND() LIMIT 1");
    sorgusu ile rastgele bir veri çekiyorum.

    tabloda 300 kayıt var diyelim. ve bunu x sütununa göre sıralattığımızda rasgele çekilen verinin sırasını bulmak istiyorum.

    $sonuc=mysql_fetch_array($query)
    ?>
    <a href="goster.php?id=<?php echo $sonuc['ID']?>"><img src="<?php echo $sonuc['Yol']?>" width="200"/></a>
    sıra numarasını row number ile bulabileceğimi düşünüyorum. ama sorgusunu nasıl yaparım bilemedim.

    $sonuç['ID'] = $gelendeger

    diye bir değişkene atasam ve select * from Sergi ORDER BY x ASC WHERE='$gelendeger'

    dedikten sonra bu fonksiyonu nasıl eklerim? Mantığım doğrumudur yoksa bunun bambaşka bir çözümü varmıdır?

    Not: Örnek olarak verdiğim x sütununda rakamlar sürekli değiştiği için sabit bir numara verip işi çözemiyorum sıralam sürekli değişebiliyor
  • 20-09-2012, 19:03:34
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    RAND Zaten Performans açısından kötü bir tercih ama illa randla rastgele veri cekicem diorsan bu verinin ID Degerini alırsın

    SELECT count(*) FROM Tablo WHERE id<$onceki_id

    ile de tablodaki sirasini alirsin...
  • 20-09-2012, 19:23:41
    #3
    Üyeliği durduruldu
    Romansanta adlı üyeden alıntı: mesajı görüntüle
    RAND Zaten Performans açısından kötü bir tercih ama illa randla rastgele veri cekicem diorsan bu verinin ID Degerini alırsın

    SELECT count(*) FROM Tablo WHERE id<$onceki_id

    ile de tablodaki sirasini alirsin...
    Performans açısından Rand kötü bir tercih demişsiniz merak ettim hocam öğrenme açısından.
    nasıl bir sorgu yazılmalı acaba?
  • 20-09-2012, 19:44:51
    #4
    EuroTurk adlı üyeden alıntı: mesajı görüntüle
    Performans açısından Rand kötü bir tercih demişsiniz merak ettim hocam öğrenme açısından.
    nasıl bir sorgu yazılmalı acaba?
    SQL buyudukce alternatif uretilebilir Kücük bir tabloda Performans açısından ciddi sonuclar doğurmaz ama Tablodaki büyüdükce bir çok alternatifi zamanla arayacaksınız.

    Verileri Cache e tutup ordan cagirmak gibi kucuk algoritmalarla sql'den belirli verileri istemek gibi PHP tarafindan random veriler olusturularak sql'den direk cagirmak gibi subquery'ler yardımı ile bir çok yöntem tercih edilebilir önemli olan ne yaptığınız neye yaptığınız...
  • 20-09-2012, 19:47:59
    #5
    benim bu noktada 2 sorum olacak

    1 tek satırlık birşey çekiyorum random muhtemelen benim sitemde (kapasitesinide göze alacak olursak) hiç bir sıkıntı yaratmaz performans açısından ama nasıl bir sorunu vardır bunun ve rasgele çekmek için başka bir alternatif var mı?

    2
    <?
    $query = mysql_query("select * from Sergi ORDER BY RAND() LIMIT 1");
    
    $sonuc=mysql_fetch_array($query);
    
    $sonuc['ID'] = $gelendeger;
    
    $sorgu = mysql_query("SELECT count(*) FROM Sergi WHERE = '$gelendeger'");
    
    $sira=mysql_fetch_array($sorgu);
    
    
    ?>
    <a href="goster.php?id=<?php echo $sonuc['ID']?>"><img src="<?php echo $sonuc['Yol']?>" width="200"/></a><br />
    Puanı: <strong><? echo $sonuc['Ortalama_Puan'] ?></strong> | Sırası <? echo $sira ?>
    bu şekilde Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in hatası aldım. nerede yanlış yapmışım acep?
  • 20-09-2012, 20:00:33
    #6
    SELECT t1.* , t1.id as t1id , (SELECT count(*) FROM tablo where id<t1id) as sira FROM tablo as t1 ORDER BY RAND() LIMIT 1


    Şöyle birşeyle tek sorguda alabilirsin ama siten buyuyup performans için baştan kontrol edeceğin zaman ilk buraya bakmakla başlayabilirsin
  • 21-09-2012, 07:39:15
    #7
    Sitenin açılışını forumdan yapacam Çok az kaldı bi kaç rötuş felan bu da son 2-3 rötüştan biri. Performans içinse en fazla 1500 satırlık bilginin olduğu bir db den olsun olsun en fazla günlük 10-15 girişlik bi site eğer onda da sorun olacaksa yapcak bişi yok daha fazlasını öğrenmek için kasacaz

    aşağıda yazdığım şekli $sonuc=mysql_fetch_array($query); satırı için hata verdi. Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in

    <?
    $query = mysql_query("SELECT Sergi.* , Sergi.ID as t1id , (SELECT count(*) FROM Sergi where ID<t1id) as sira FROM Sergi as t1 ORDER BY RAND() LIMIT 1");
    
    $sonuc=mysql_fetch_array($query);
    
    ?>
    <a href="goster.php?id=<?php echo $sonuc['ID']?>"><img src="<?php echo $sonuc['Yol']?>" width="200"/></a><br />
    Puanı: <strong><? echo $sonuc['Ortalama_Puan'] ?></strong> | Sırası: <? echo $sonuc['ID'] ?>
    buradaki kod ise çalıtırmaya çalıştığım kod.

    Sırası: <? echo $sonuc['ID'] ?> olarak yazdığım yer sıra numarası olması gerekiyor ama onu muhtemelen yanlış bir şekilde çağırıyorum çünkü nasıl çağırmam gerektiğini çözemedim

    Tablomun adı Sergi
  • 21-09-2012, 08:23:57
    #8
    EuroTurk adlı üyeden alıntı: mesajı görüntüle
    Performans açısından Rand kötü bir tercih demişsiniz merak ettim hocam öğrenme açısından.
    nasıl bir sorgu yazılmalı acaba?
    Sql Tablosu büyüdükçe rand fonksiyonu performans düşüşü sağlar.
    Bunun yerine random id php ile oluşturup bu id çekilebilir.

    $veri=rand(1, 10000);

    SELECT kelime FROM sozluk WHERE id= '$veri'";

    Bunu kendinde test edebilirsin.

    $time_baslar = microtime(true); 
    SELECT kelime FROM sozluk ORDER BY RAND() LIMIT 1;
    $time_biter = microtime(true);
    $time_sonuc = $time_end - $time_start;
    echo $time_sonuc;
    Sonuc: (0.08 sec)


    $time_baslar = microtime(true); 
    SELECT kelime FROM sozluk WHERE id= '$veri'";
    $time_biter = microtime(true);
    $time_sonuc = $time_end - $time_start;
    //echo $time_sonuc;
    printf("%.5f", $time_sonuc);
    Sonuc: (0.0006 sec)
  • 21-09-2012, 10:03:17
    #9
    Misafir adlı üyeden alıntı: mesajı görüntüle
    Sql Tablosu büyüdükçe rand fonksiyonu performans düşüşü sağlar.
    Bunun yerine random id php ile oluşturup bu id çekilebilir.

    $veri=rand(1, 10000);

    SELECT kelime FROM sozluk WHERE id= '$veri'";

    Bunu kendinde test edebilirsin.

    $time_baslar = microtime(true); 
    SELECT kelime FROM sozluk ORDER BY RAND() LIMIT 1;
    $time_biter = microtime(true);
    $time_sonuc = $time_end - $time_start;
    echo $time_sonuc;
    Sonuc: (0.08 sec)


    $time_baslar = microtime(true); 
    SELECT kelime FROM sozluk WHERE id= '$veri'";
    $time_biter = microtime(true);
    $time_sonuc = $time_end - $time_start;
    //echo $time_sonuc;
    printf("%.5f", $time_sonuc);
    Sonuc: (0.0006 sec)
    where id=$veri yerine
    where id<$veri LIMIT 1 veya
    where id>$veri LIMIT 1 kullanmak daha sağlıklı tabloda veri ekleme çıkarma esnasında xx id'li satir silinmiş olabilir bu sayade sorgudan sonuc donmesi garantilenebilir..