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.