2012-03-30 37 views

cevap

13

bir kimlik alanını gerektirecektir kullanabileceğiniz farklı rasgele kaydını almak için, tablodan

MySQL

SELECT questionID FROM questions ORDER BY RAND() LIMIT 1 

MS Access

SELECT top 1 questionID from questions ORDER BY rnd(questionID) 
+8

MS Access sürümü, rastgele kayıtlar üretiyor gibi görünüyor - ama her seferinde aynı! – kneidels

+1

AGREE .. aynı rastgele kayıtları –

23

rastgele QuestionID alacak şu Hesabınızdakiler

SELECT TOP 1 questionID FROM questions ORDER BY Rnd(-(100000*questionID)*Time()) 

Rnd işlevine parametre olarak iletilen bir negatif değer, bu parametreyi başlangıç ​​değeri olarak kullanarak ilk rastgele değeri üreteciden iletecektir. (Bir çeşit tanımlı randomize). @kobik 'in yorumlarına özel teşekkürler.

+2

Komik bir şey. Ben de dahil olmak üzere tüm önerilen cevapları test ettim. Farklı/rasgele kayıtlar alıyorum. ancak test programımı tekrar çalıştırdığımda sonuçlar daha önceki gibi aynı sırada. Rastgele tohum üreteci, ms-erişimde her seferinde sıfırlarmış gibi. Daha sonra bunu buldum: [Rastgele Sayı Üreteci Sorgusu Çok Rasgele Değil] (http://database.ittoolbox.com/groups/technical-functional/access-l/random-number-generator-query-not-so-random- 3887838) – kobik

+0

aynı şeyi yapar bummi, her çalıştırdığımda aynı sonuçları elde edeceğim –

+0

o yüzden nasıl bir düzeltme önerdiğini saptamak için @Kobik –

4
SELECT TOP 5 questionID FROM [tableName] ORDER BY rnd(INT(NOW*questionID)-NOW*questionID) 

Bu, her zaman yeni bir zaman olacak cevaplar yeni bir dizi her zaman, sen bile "ŞİMDİ" kullandığınızda bir zamanı telafi gerekmez (verecektir Bu olursa olsun tıklayın Benim fikrimce, bunu Access'te çözmek için en basit ve temiz yol.

+0

Bu benim için tamamıyla mükemmel çalışıyor. Diğer tüm yöntemler aynı kayıt kümesini verir. İyi iş. – MatVAD