Zunächst einmal verwenden Sie nicht RAND()
korrekt. Es gibt eine Dezimalzahl 0 <= N < 1
zurück . Der Eingabewert ist ein Startwert, keine Obergrenze, wie Sie erwarten. Um eine zufällige Ganzzahl zwischen 0 <= N < Count
zu erhalten , müssen Sie das Ergebnis multiplizieren, dh RAND()*Count
, was Sie nicht tun. Aber Sie müssen das nicht tun, Sie können einfach RAND()
verwenden allein, es ist nicht notwendig, zuerst die Anzahl der Datensätze abzufragen:
qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic" ORDER BY RAND() LIMIT 1';
qryCards.Open;
ShowMessage(qryCards.FieldByName('Card_Name').AsString);
Andernfalls können Sie einen zufälligen Datensatz auswählen, indem Sie einen Offset zum LIMIT
angeben Klausel, zB:
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);
Wenn Ihre Tabelle ein ID-Feld mit automatischer Erhöhung ohne Lücken enthält, gibt es andere Techniken, die Sie verwenden können RAND()
mit. Siehe MySQL Select Random Records
für Beispiele.