Prima di tutto, non stai usando RAND()
correttamente. Restituisce un numero decimale 0 <= N < 1
. Il valore di input è un seme, non un limite superiore come ti aspetti. Per ottenere un numero intero casuale compreso tra 0 <= N < Count
, devi moltiplicare il risultato, cioè RAND()*Count
, cosa che non stai facendo. Ma non è necessario farlo, puoi semplicemente usare RAND()
di per sé, non è necessario eseguire prima una query sul conteggio dei record:
qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic" ORDER BY RAND() LIMIT 1';
qryCards.Open;
ShowMessage(qryCards.FieldByName('Card_Name').AsString);
Altrimenti, puoi selezionare un record casuale specificando un offset al LIMIT
clausola, ad esempio:
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);
Se la tua tabella ha un campo ID a incremento automatico senza spazi vuoti, ci sono altre tecniche che puoi usare RAND()
insieme a. Vedi MySQL Select Random Records
per esempi.