Za prvé, nepoužíváte RAND()
správně. Vrací desetinné číslo 0 <= N < 1
. Vstupní hodnota je semeno, nikoli horní limit, jak očekáváte. Chcete-li získat náhodné celé číslo mezi 0 <= N < Count
, musíte výsledek vynásobit, tj. RAND()*Count
, což neděláte. Ale to nemusíte dělat, stačí použít RAND()
sám o sobě není nutné nejprve dotazovat počet záznamů:
qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic" ORDER BY RAND() LIMIT 1';
qryCards.Open;
ShowMessage(qryCards.FieldByName('Card_Name').AsString);
Jinak můžete vybrat náhodný záznam zadáním posunu k LIMIT
klauzule, např.:
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);
Pokud vaše tabulka obsahuje pole ID s automatickým přírůstkem bez mezer, můžete použít další techniky RAND()
s. Viz MySQL Select Random Records
pro příklady.