Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd składni z funkcją Rand() w MySQL w Delphi

Po pierwsze, nie używasz RAND() prawidłowo. Zwraca liczbę dziesiętną 0 <= N < 1 . Wartość wejściowa to ziarno, a nie górna granica, której oczekujesz. Aby uzyskać losową liczbę całkowitą między 0 <= N < Count , musisz pomnożyć wynik, tj. RAND()*Count , czego nie robisz. Ale nie musisz tego robić, możesz po prostu użyć RAND() samo w sobie, nie ma potrzeby sprawdzania najpierw liczby rekordów:

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

W przeciwnym razie możesz wybrać losowy rekord, określając przesunięcie LIMIT klauzula, np.:

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

Jeśli Twoja tabela ma pole identyfikatora automatycznego zwiększania bez przerw, istnieją inne techniki, których możesz użyć RAND() z. Zobacz Wybieranie losowych rekordów MySQL po przykłady.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak połączyć się z serwerem MySQL na innym hoście?

  2. wstaw pole tekstowe wartości do bazy danych mysql

  3. Modelowanie baz danych:jak kategoryzować produkty takie jak Amazon?

  4. Wyniki wyszukiwania słów kluczowych i rankingu

  5. MySQL:dynamiczne określanie klucza podstawowego tabeli