Access ve Random Kayıt

Veritabanı olarak access kullanılan bir projede rasgele seçilmiş 5 tane resmi sayfada göstermemiz gerekiyordu.

Fakat Sql`de çalışan ve bize her seferinde 5 farklı kayıt getiren şu kod access`de çalışmıyor.

SELECT top 5 ID FROM Tablo_Adi ORDER BY newid()

Çünki newid() fonksiyonu access için geçerli değildi. Bende zaman sorunu olduğu için en iyi kod çalışan koddur mantığından yola çıkarak dolaylı bir çözüm bulmuştum.

Önce ID leri bir arrayList`e çekip bunların içerisinden rasgele 5 ID yi çekiyordum ama aynı kaydın gelme ihtimali yüzünden her bulduğum ID`yi farklı bir arrayList`e aktarıp bir önceki arrayList`imden çıkartıyordum. Sonuçta elimde birbirinden farklı rasgele seçilmiş 5 adet ID vardı. İşlemin geri kalanını bu 5 ID üzerinden tamamlıyordum. Fakat performans açısından çokta verimli değildi açıkçası :)

Neyse zaman sorunu olduğu için bu şekilde projeyi tamamladım ama araştırmalarım devam ediyordu. Araştırmalar sonucunda şöyle bir örnek buldum;

SELECT TOP 5 ID FROM Tablo_Adi Order By rnd(ID)

Fakat bu seferde rasgele gelen 5 kayıt sorgumuz her çalıştığında aynı geliyordu. Bunun üzerine ufak bir araştırma yaptıktan sonra sorgumuz aşağıdaki son halini almış oldu. Böylece sorgumuz her çalıştığında rasgele seçilmiş 5 farklı kayıt getirir hale geldi.

SELECT TOP 5 ID FROM Tablo_Adi Order By rnd(-(ID)*Time())

Sorgumuzun bu son hali ile ihtiyacımız olan işlemi kolayca gerçekleştirdim. Benzer bir durumla karşılaşan olursa ve benim tekrar ihtiyacım olursa diye buradan da paylaşmak istedim, umarım faydası olur.

Access ve Random Kayıt” üzerine 12 düşünce

  1. tşkler fakat veri tabanından rastgele getirilen bu 5 kayıt artan yada azalan şeklinde bir türlü sıralanamıyor.

  2. @serhat sorgunun mantığı gereği zaten istediğin sıralamanın olmaması normal. Şöyle birşey yapabilirsin belki; sorgudan gelen sonucu ayrı bir işlemden geçirerek sıralama yaptırabilirsin. Sorgu ile aldığın rastgele 5 sonucu bir datatable`a atabilir sonra bu datatable üzerinde sıralama yaptırabilirsin.

  3. Beni boşa harcayacağım saatlerden kurtardın.. Teşekkür ederim..

  4. dostum çok sağol. walla süper bi kod. tam istediğim olayı yapmış oldu. ellerine sağlık.

  5. Çok Teşekkür ederim. newid .mdb de çalışmayınca moralim bozulmuştu. ama sayende moralim düzeldi. Tek kelimeyle harikasın. iyi çalışmalar dilerim.

  6. rastgele çekilen 5 kayıdın 1 gün sonra değişmesi için ne yapmalıyız. Her çalıştıgında aynı gelsin ama 1 gün sonra farklı kayıtlar gelsin. böylebir şey yapabilirmiyiz. teşekkürler.


  7. kazım yesilbayrak:

    rastgele çekilen 5 kayıdın 1 gün sonra değişmesi için ne yapmalıyız. Her çalıştıgında aynı gelsin ama 1 gün sonra farklı kayıtlar gelsin. böylebir şey yapabilirmiyiz. teşekkürler.

    Time() değeri sorgunun çalıştığı andaki zamanı alıyor ve bunu saat, dakika ve saniye olarak aldığından her çağrıldığında bir öncekinden farklı bir değer aldığından farklı sonuçlar döndürüyor.

    Günde bir kez değişmesi için Time() yerine Date() kullanırsanız sanırm istediğiniz şekilde günde bir kere rastgele 5 kaydı almış olacaksınız. Bir sonraki güne kadar hep aynı karışık liste gelecek.

    SELECT TOP 5 ID FROM Tablo_Adi Order By rnd(-(ID)*Date())

  8. süpersinn :) tam olmicak derken bu sayfa karşıma çıktı teşekkürler :)

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir