sql >> Database >  >> RDS >> Mysql

Syntaxisfout met de functie Rand() in MySQL in Delphi

Ten eerste, je gebruikt RAND() . niet correct. Het geeft een decimaal getal terug 0 <= N < 1 . De invoerwaarde is een seed, geen bovengrens zoals u verwacht. Om een ​​willekeurig geheel getal te krijgen tussen 0 <= N < Count , moet u het resultaat vermenigvuldigen, bijv. RAND()*Count , wat u niet doet. Maar u hoeft dat niet te doen, u kunt gewoon RAND() . gebruiken op zichzelf is het niet nodig om eerst het aantal records op te vragen:

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

Anders kunt u een willekeurig record selecteren door een offset op te geven voor de LIMIT clausule, bijvoorbeeld:

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

Als uw tabel een auto-increment id-veld heeft zonder gaten erin, zijn er andere technieken die u kunt gebruiken RAND() met. Zie MySQL Willekeurige records selecteren voor voorbeelden.




  1. Oracle dezelfde tabelnaam op ander schema?

  2. Hoe eerst op nummer te sorteren met Oracle SQL-query?

  3. 3 manieren om de tijdzone te retourneren van een datetime-waarde in Oracle

  4. Is het mogelijk om objecten als parameters door te geven aan de PL SQL-pakketprocedure?