sql >> Databáze >  >> RDS >> Mysql

Chyba syntaxe s funkcí Rand() v MySQL v Delphi

Za prvé, nepoužíváte RAND() správně. Vrací desetinné číslo 0 <= N < 1 . Vstupní hodnota je semeno, nikoli horní limit, jak očekáváte. Chcete-li získat náhodné celé číslo mezi 0 <= N < Count , musíte výsledek vynásobit, tj. RAND()*Count , což neděláte. Ale to nemusíte dělat, stačí použít RAND() sám o sobě není nutné nejprve dotazovat počet záznamů:

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

Jinak můžete vybrat náhodný záznam zadáním posunu k LIMIT klauzule, např.:

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

Pokud vaše tabulka obsahuje pole ID s automatickým přírůstkem bez mezer, můžete použít další techniky RAND() s. Viz MySQL Select Random Records pro příklady.




  1. Znak ampersand (&) je v Oracle ORDER BY ignorován

  2. Oracle Connection Pooling v .Net

  3. Jsou důležité podmínky pro pořadí připojení?

  4. Přírůstek identity skáče v databázi SQL Server