सबसे पहले, आप RAND()
. का उपयोग नहीं कर रहे हैं सही ढंग से। यह एक दशमलव संख्या देता है 0 <= N < 1
. इनपुट मान एक बीज है, ऊपरी सीमा नहीं जैसा आप उम्मीद कर रहे हैं। 0 <= N < Count
. के बीच एक यादृच्छिक पूर्णांक संख्या प्राप्त करने के लिए , आपको परिणाम को कई गुना करना होगा, अर्थात RAND()*Count
, जो आप नहीं कर रहे हैं। लेकिन आपको ऐसा करने की आवश्यकता नहीं है, आप बस RAND()
. का उपयोग कर सकते हैं अपने आप में, पहले रिकॉर्ड संख्या को क्वेरी करने की कोई आवश्यकता नहीं है:
qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic" ORDER BY RAND() LIMIT 1';
qryCards.Open;
ShowMessage(qryCards.FieldByName('Card_Name').AsString);
अन्यथा, आप LIMIT
. पर ऑफ़सेट निर्दिष्ट करके एक यादृच्छिक रिकॉर्ड का चयन कर सकते हैं खंड, जैसे:
qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic"';
qryCards.Open;
iCount := qryCards.RecordCount;
qryCards.Close;
qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic" LIMIT ' + IntToStr(Random(iCount)) + ', 1');
qryCards.Open;
ShowMessage(qryCards.FieldByName('Card_Name').AsString);
यदि आपकी तालिका में एक ऑटो-इन्क्रीमेंट आईडी फ़ील्ड है जिसमें कोई अंतराल नहीं है, तो ऐसी अन्य तकनीकें हैं जिनका आप उपयोग कर सकते हैं RAND()
साथ। देखें MySQL सेलेक्ट रैंडम रिकॉर्ड्स
उदाहरण के लिए।