sql >> Databasteknik >  >> RDS >> Mysql

Syntaxfel med Rand()-funktionen i MySQL i Delphi

För det första använder du inte RAND() korrekt. Den returnerar ett decimaltal 0 <= N < 1 . Ingångsvärdet är ett frö, inte en övre gräns som du förväntar dig. För att få ett slumpmässigt heltal mellan 0 <= N < Count , du måste multiplicera resultatet, dvs RAND()*Count , vilket du inte gör. Men du behöver inte göra det, du kan bara använda RAND() i sig behöver du inte fråga postantalet 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);

Annars kan du välja en slumpmässig post genom att ange en offset till LIMIT klausul, t.ex.:

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

Om din tabell har ett auto-inkrementerings-id-fält utan luckor i det, finns det andra tekniker du kan använda RAND() med. Se MySQL Select Random Records för exempel.




  1. Fråga för att ta bort unik eller primär nyckel från MYsql-tabellen

  2. Oracle SQL Developer 21.4.2 och SQLcl 21.4.1 är nu tillgängliga

  3. Föräldraträd i mysql-tabellen (while-loop)

  4. SQL Server Escape ett understreck