Mysql
 sql >> база данни >  >> RDS >> Mysql

Синтактична грешка с функцията Rand() в MySQL в Delphi

Първо, вие не използвате RAND() правилно. Връща десетично число 0 <= N < 1 . Въведената стойност е начална стойност, а не горна граница, както очаквате. За да получите произволно цяло число между 0 <= N < Count , трябва да умножите резултата, т.е. RAND()*Count , което не правите. Но не е нужно да правите това, можете просто да използвате RAND() само по себе си не е необходимо първо да се прави заявка за броя на записите:

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

В противен случай можете да изберете произволен запис, като посочите отместване на LIMIT клауза, напр.:

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

Ако вашата таблица има автоматично увеличаващо се поле за идентификатор без пропуски в него, има други техники, които можете да използвате RAND() с. Вижте MySQL Select Random Records за примери.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL заявката не показва очаквания резултат

  2. Как да свържа mySQL в моя проект за Android?

  3. MySQL формат за дата

  4. ГРЕШКА 1406:1406:Данните са твърде дълги за колона, но не трябва да бъдат?

  5. Сумирайте резултатите от няколко заявки и след това намерете топ 5 в SQL