11MarASP Access random kayıt getirme sorununun çözümü

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.


  1. 1 ömer09 Haz 2010

    Çok teşekkür ederim. Allah razı olsun uzun zamandır bunu arıyordum :) sağol

  2. 2 Mücahit YENEN10 Haz 2010

    Faydalı olduysa ne mutlu

  3. 3 Tatar muraT28 Haz 2010

    ikidir senin yazılarında çok arayıpta bulamadığım çözümleri buldum. Teşekkür ederim arkadaşım. Güzel bir çalışma. Bende faydalandım ve gayet faydalı oldu. Tekrar çok sağol.

  4. 4 Mücahit YENEN07 Tem 2010

    faydalı olmasına sevindim. Zaten bu blogda ağırlıklı olarak kendiminde çok aradığı şeyleri paylaşmayı seviyorum başkaları aramasın diye :)

  5. 5 varlık09 Kas 2010

    Çok tşk.ler Gerçekten o kadar çok işime yaradı ki

    Select Top 1 * FROM Products WHERE status=1 Order By rnd(-(productID)*Time()) süper oldu ya tşk.ler

  6. 6 egumrukcu22 Şub 2011

    çok faydalı oldu teşekkürler …fakat aklıma takılan buradaki Time() tam olarak ne iş yapıyor ?

  7. 7 Tunç25 Eki 2011

    çok saol kardeş Allah işini rast getirsin

Recent Flickrs

    Blogroll

    Recent Listening