• 16-01-2022, 13:45:10
    #1
    Üyeliği durduruldu
    Şu anda özel-ücretli script arayışım yok. O yüzden lütfen teklif göndermeyiniz.

    Merhaba arkadaşlar. Php ile basit random scriptini kendim yapıp kullandım. Ancak tombala mantığıyla çalışan bir random fonksiyonu yapmak istiyorum. Php bilgim maalesef çok kötü.

    Diyelim ki 10000 satırdan oluşan DÜNYADA ŞEHİRLER isimli bir listem var.
    Sehirler.php sayfamı görüntüleyen her kişi ayrı bir şehir adı görebilsin istiyorum. Bir şehir ismi sadece bir kez görüntülensin. Tüm şehirler bir kez görüntülenip listede şehir kalmayınca LİSTE BİTTİ uyarısı görüntülensin.


    ***


    Böyle bir fonksiyon birçok kişinin çok farklı ihtiyaçlarını görecektir.
    Bu fonksşyon kullanılarak çok farklı projeler yapılabilir.

    Bu fonksiyonu en basit nasıl yapabiliriz?
    Yardımcı olanlara şimdiden teşekkürler.
  • 16-01-2022, 15:00:39
    #2
    Eğer doğru anladıysam;

    Şehirler tablosundan durumu 0 olanlardan rastgele olarak bir şehir çekeceksiniz. Ardından çekilen şehrin durumunu 1 olarak güncelliyeceksiniz. Döngü bu şekilde devam edicek

    Örnek tablo yapısı

    sehirler

    id
    sehir
    durum ( varsayılan 0 )

    Örnek Kod;

    $sehir = $db->query("SELECT * FROM sehirler where durum='0' order by rand() limit 1")->fetchAll(PDO::FETCH_ASSOC)[0];
    
    echo 'Şansına bu şehir çıktı '.$sehir['sehir'].', tebrikler.';
    
    // seçilen şehiri tekrar seçilmemesi için durumu 1 olarak güncelle;
    
    $db->query("update sehirler set durum='1' where id='".$sehir['id']."'");
  • 16-01-2022, 16:36:36
    #3
    Üyeliği durduruldu
    Riga adlı üyeden alıntı: mesajı görüntüle
    Eğer doğru anladıysam;

    Şehirler tablosundan durumu 0 olanlardan rastgele olarak bir şehir çekeceksiniz. Ardından çekilen şehrin durumunu 1 olarak güncelliyeceksiniz. Döngü bu şekilde devam edicek

    Örnek tablo yapısı

    sehirler

    id
    sehir
    durum ( varsayılan 0 )

    Örnek Kod;

    $sehir = $db->query("SELECT * FROM sehirler where durum='0' order by rand() limit 1")->fetchAll(PDO::FETCH_ASSOC)[0];
    
    echo 'Şansına bu şehir çıktı '.$sehir['sehir'].', tebrikler.';
    
    // seçilen şehiri tekrar seçilmemesi için durumu 1 olarak güncelle;
    
    $db->query("update sehirler set durum='1' where id='".$sehir['id']."'");

    Teşekkür ederim hocam. Aslında benim içerlediğim bir konu var. Random gibi bir fonksiyon varken ayrıca burada bahsettiğim gibi bir fonksiyon olmaması.

    Burada verdiğiniz kodda db yerine text listesi kulansak performans-işlemci ram tüketimi açısından ne gibi bir fark olur? 10k 100k satırlık metin yerine db kullanılması tabii ki daha doğru diyebilir miyiz?
  • 16-01-2022, 16:42:52
    #4
    looktr adlı üyeden alıntı: mesajı görüntüle
    Teşekkür ederim hocam. Aslında benim içerlediğim bir konu var. Random gibi bir fonksiyon varken ayrıca burada bahsettiğim gibi bir fonksiyon olmaması.

    Burada verdiğiniz kodda db yerine text listesi kulansak performans-işlemci ram tüketimi açısından ne gibi bir fark olur? 10k 100k satırlık metin yerine db kullanılması tabii ki daha doğru diyebilir miyiz?
    Bu kaç adet şehir olduğuna, mysql optimizasyonuna göre değişir.

    Örneğin bir txt içerisinde alt alta şehir listesi varsa bu mysql txtye oranla daha hızlı ve doğru bir çözüm olabilir.

    Performans konusunda tam doğru bilgiye sahip olduğumu söyliyemem bu işlem için ama.

    TXT tarafında bu işlemi yapabilmeniz için tüm satırları diziye alıp o dizinden random seçip yapmanız gerekir. Ancak mysqlde rand() limit 1 uygulanarak tek veri random olarak çekilir.

    Ayrıca txt satırlı veride seçilen şehiri silip dosyayı geri kaydetmelisiniz.
  • 16-01-2022, 22:16:20
    #5
    Üyeliği durduruldu
    Riga adlı üyeden alıntı: mesajı görüntüle
    Bu kaç adet şehir olduğuna, mysql optimizasyonuna göre değişir.

    Örneğin bir txt içerisinde alt alta şehir listesi varsa bu mysql txtye oranla daha hızlı ve doğru bir çözüm olabilir.

    Performans konusunda tam doğru bilgiye sahip olduğumu söyliyemem bu işlem için ama.

    TXT tarafında bu işlemi yapabilmeniz için tüm satırları diziye alıp o dizinden random seçip yapmanız gerekir. Ancak mysqlde rand() limit 1 uygulanarak tek veri random olarak çekilir.

    Ayrıca txt satırlı veride seçilen şehiri silip dosyayı geri kaydetmelisiniz.
    teşekür ederim hocam.