Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Syntaxfehler mit Rand()-Funktion in MySQL in Delphi

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.