sql >> Database teknologi >  >> RDS >> Mysql

Syntaksfejl med Rand() funktion i MySQL i Delphi

For det første bruger du ikke RAND() korrekt. Det returnerer et decimaltal 0 <= N < 1 . Indgangsværdien er et frø, ikke en øvre grænse, som du forventer. For at få et tilfældigt heltal mellem 0 <= N < Count , skal du multiplicere resultatet, dvs. RAND()*Count , hvilket du ikke gør. Men du behøver ikke at gøre det, du kan bare bruge RAND() i sig selv er der ingen grund til at forespørge om registreringsantallet først:

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

Ellers kan du vælge en tilfældig post ved at angive en offset til LIMIT klausul, f.eks.:

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

Hvis din tabel har et auto-increment id-felt uden huller i det, er der andre teknikker, du kan bruge RAND() med. Se MySQL Select Random Records for eksempler.




  1. Sådan tuner eller tester du PLSQL-kodeydeevne i Oracle D2k-formularer

  2. Indsætter millioner af poster fra lokal hosting til godaddy-hosting

  3. Dynamisk krydsfaneforespørgsel i Oracle

  4. Importer .sql-fil i pgadmin iii