Първо, вие не използвате 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 Select Random Records
за примери.