Mysql
 sql >> Base de données >  >> RDS >> Mysql

Erreur de syntaxe avec la fonction Rand () dans MySQL dans Delphi

Tout d'abord, vous n'utilisez pas RAND() correctement. Il renvoie un nombre décimal 0 <= N < 1 . La valeur d'entrée est une graine, pas une limite supérieure comme vous l'attendez. Pour obtenir un nombre entier aléatoire entre 0 <= N < Count , vous devez multiplier le résultat, c'est-à-dire RAND()*Count , ce que vous ne faites pas. Mais vous n'avez pas besoin de le faire, vous pouvez simplement utiliser RAND() par lui-même, il n'est pas nécessaire de demander d'abord le nombre d'enregistrements :

qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic" ORDER BY RAND() LIMIT 1';
qryCards.Open;
ShowMessage(qryCards.FieldByName('Card_Name').AsString);

Sinon, vous pouvez sélectionner un enregistrement aléatoire en spécifiant un décalage au LIMIT clause, par exemple :

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);

Si votre table a un champ d'identification à incrémentation automatique sans espace, il existe d'autres techniques que vous pouvez utiliser RAND() avec. Voir MySQL Select Random Records pour des exemples.